Ir al contenido principal

[Android] Mi primera aplicación para Android (III)

Ahora vamos a crear la interface de nuestra aplicación.
He añadido tres iconos en los directorios drawable-hdpidrawable-ldpidrawable-mdpi, en cualquier resolución vamos a usar el mismo. Como observarás, el fichero R.java se ha regenerado con los nuevos iconos.
Hacemos doble click en main.xml, tendremos algo como esto:

Se recomienda cambiar el tipo de versión de Android a 2.2 para que sea lo mas compatible posible con muchos modelos de Android.
Borraremos el TextView con el "Hello World!" que viene por defecto.
Seleccionamos la pestaña de main.xml y modificamos el "LinearLayout" por un "ScrollView"

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</ScrollView>

Añadimos un "TableLayout" al que llamaremos "ListSound"
Luego le daremos al botón derecho sobre el objeto y seleccionaremos "Add Row", añadiremos 3 rows, para nuestros tres sonidos.
Seleccionaremos "ImageButton" en la paleta de herramientas (Images & Media) y lo arrastramos dentro de cada uno de las filas, de igual forma arrastramos el objeto "TextView". En cada uno de los botones, lo llamamos "perroBtn", "ovejaBtn" y "patoBtn". Modificamos el texto en cada fila.
Los textos deben de estar registrados en el fichero de recursos, por lo que abriremos el fichero "string.xml" que está en la carpeta "Values", añadimos los tres textos que necesitamos



entonces, cuando seleccionamos el texto, lo que realmente estamos seleccionado es la referencia a un atributo, de esta forma, podemos tener una aplicación multi-idioma, pues la referencia es la misma, solo cambia el valor según el resource que esté usando.

Seleccionaremos el botón y modificamos la propiedad "Src", pondremos el valor "@drawable/ic_menu_play", y al texto le ponemos la propiedad "Layout Gravity" "Layout gravity center_vertical|center_horizontal"

Bueno.. pues la interface parece estar lista, pero solo es una fachada. Vamos a ponerle un poquito de negocio a estos botones.

Creamos una nueva clase, al que llamaremos "Sounds.java", dentro del paquete "src"

La Superclass ha de ser "android.app.Activity" que es la que se ejecuta al iniciar una aplicación en Android.
Tambien tenemos que añadir el fichero de recurso.
import kurro.software.sounds.R;Como vamos a controlar botones y vamos a ejecutar sonidos, también debemos de importar las librearias de MediaPlayer e ImageButton.

import android.media.MediaPlayer;
import android.widget.ImageButton;


Tambien necesitamos las librerías para el control de errores (log) y objetos de mapeo de objetos (budle)
import android.util.Log;
import android.os.Bundle;

Hacemos un "Override" del método "onCreate", porque vamos a indicarle cual es el Layout que debe de mostrar al inicio, así como el método a ejecutar cuando pulsemos los botones.
@Override
public void onCreate(Bundle savedInstanceState)
{
try
{
// Invocamos al parent y ejecutamos el método onCreate
super.onCreate(savedInstanceState);
// Definimos cual es el ContentView (usamos el Id almacenado en R)
setContentView(R.layout.main);

// Recogemos el handler de los botones
ibPerro = (ImageButton) findViewById(R.id.perroBtn);
ibOveja = (ImageButton) findViewById(R.id.ovejaBtn);
ibPato = (ImageButton) findViewById(R.id.patoBtn);

}catch (Exception e) 
{
Log.d("onCreate", "Error: "+e.toString());
}
}
Ahora vamos a asociar el listener del evento onClick a una función para que ejecute el sonido correspondiente. Nota que cuando vamos a asociarle el evento, automáticamente va ha hacer el override del evento.

// Asociamos el evento onClick a la función PlaySound()
ibPerro.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("Sounds", "Perro Clicked");
playSound(R.raw.perro);
}
});

Repetimos lo mismo para los otros botones, obviamente, con su correspondiente Id de sonido.
La función de playSound tiene el siguiente aspecto.
protected void playSound(int soundId) {

try {
Log.d("playingSound", "playing sound " + soundId);
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
mediaPlayer = MediaPlayer.create(this, soundId);
mediaPlayer.start();
} catch (Exception e) {
Log.d("playSound", e.toString());
}
}

No nos olvidemos de destruir el objeto de media player cuando cerremos la aplicación.

@Override
protected void onDestroy() {
super.onDestroy();
// TODO Auto-generated method stub
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}

Antes de nada.... configurar el manifest.xml para que sepa nuestro Android como tiene que ejecutar la aplicación.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="kurro.software.sounds"
      android:versionCode="1"
      android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />


    <application android:label="@string/app_name" 
    android:icon="@drawable/ic_menu_happy" 
    android:description="@string/description">
        <activity android:description="@string/description" android:name="Sounds" android:label="@string/app_name" android:icon="@drawable/ic_menu_happy">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"></action>
                <category android:name="android.intent.category.LAUNCHER"></category>
            </intent-filter>
        </activity>
    </application>
</manifest>


Comentarios

Entradas populares de este blog

[VB] - Generar GUID

Esta si es buena... Como se nota que VB es un lenguaje con "solera", es decir, con años pero con robustez. Pero le pasa como al abuelo Cebolleta, tiene experiencia pero para los nuevos tiempos... ains.. le falta algo. Hoy en dia no sabriamos hacer nada sin un buen GUID, sobre todo si lo que queremos es identificar de forma unica y constante algun registro, objeto u otro componente. Usando SQL podemos generar un GUID en un santiamen a traves de la instrucción NEWID() , podemos crear un nuevo GUID en .NET usando la clase GUID.. pero... como lo hacemos con Visual Basic 6? Para empezar, vamos a ver en que se compone un GUID ¿Que es un GUID? Su significado es Globally Unique Identifier, osea Identificador globalmente único. Y su misión es la de proporcionar un identificador, de forma que es practicamente imposible que existan dos iguales en el mundo. Se compone de una palabra de 4 bytes, 3 palabras de 2 bytes y una de 6 bytes. Originalmente fue una idea de Microsoft pa

[.NET] Convertir Latitud y Longitud en Grados - Minutos y segundos

Hola a todos. Esta es una función para convertir un número de posición geográfica en grados, minutos y segundos. Como algunos pocos recordarán,una posición geográfica esta definida por latitud (Norte / Sur) y longitud (Este / Oeste) teniendo como referencia para la longitud el meridiano de Greenwich (Meridiano 0) y para la latitud la linea del Ecuador (Paralelo 0). Por lo que siempre hablaremos de posición " Grados Norte ", o " Grados Este ". Ahora es cuando entra en juego las matemáticas y la trigonometría (he de admitir que me encantan :D ). El hemisferio norte o sur solo tendría 90° Norte o Sur. Por ejemplo, El polo norte está a 90° 0' 0'' N de latitud. La longitud podríamos considerar el 0° 0' 0'' (estamos en el polo norte, por lo que es un solo punto, no hay longitud). En cambio, si nos movemos alrededor de la tierra por la linea de Ecuador, la latitud será 0° 0' 0'' (ni al norte, ni al sur) pero de Este a Oeste nos m