Ahora vamos a crear la interface de nuestra aplicación.
He añadido tres iconos en los directorios drawable-hdpi, drawable-ldpi y drawable-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)
He añadido tres iconos en los directorios drawable-hdpi, drawable-ldpi y drawable-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;
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>
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
Publicar un comentario
Si quieres comentar, criticar, aportar mas informacion o simplemente felicitar, inserta tu comentario a continuacion. Entre todos podemos hacer cosas grandes.