Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Android / Funny Sounds: Sonidos divertidos para celular

Funny Sounds: Sonidos divertidos para celular

Autor jc mouse domingo, agosto 4, 2013

En este tutorial “Android Bolivia” construiremos nuestra propia aplicaci贸n para molestar a los amigos con sonidos divertidos (pedos, piropos, silbidos, chistes, etc), podremos usarlo en sal贸n de clases, en el recreo, en la universidad, en el trabajo y porque no en la iglesia 馃槈

app funny

Al termino de este tutorial, aprenderemos el uso de archivos de sonido en android, veremos el uso de聽ImageButton en XML y su implementaci贸n en c贸digo, veremos como usar dos LAYOUTS (vistas) para cada posici贸n del tel茅fono (Landscape y Portrait).

Necesitamos.

– IDE Eclipse Indigo con Android instalado y configurado.

– Archivos de sonido MP3, imagenes JPG y PNG

Nivel: Android b谩sico, Java intermedio, XML intermedio

Duraci贸n: 20 minutos

SONIDOS DIVERTIDO PROYECTO ECPLISE

1.Crea un nuevo聽Application Android Project聽con la siguiente configuraci贸n:

Application Name:聽Funny Sounds

Project Name:聽FunnySounds

Package Name:聽com.tutorial.funnysounds

Activity:聽Blank Activity

Activity Name: MainActivity.java

Layout Name:聽activity_main.xml

2. Para este proyecto, haremos uso de im谩genes JPG y PNG 聽para los botones y el fondo de la aplicaci贸n, utilizaremos tambi茅n archivos XML para la animaci贸n de botones como vimos en post anteriores.

resource

Estos archivos, debes colocarlos en la carpeta聽RES/DRAWABLE-MDPI/聽.

Necesitamos 4 archivos de sonido en formato MP3 (latigo,silbido,pedo,yegua) de 1 0 3 segundos de duraci贸n, estos archivos de audio debemos colocarlos en la carpeta ASSETS.

Descargate los archivos de imagen, XML y MP3聽[AQUI]

3. Vamos ahora a crear la interfaz de usuario, abre el archivo activity_main.xml que esta en RES/LAYOUT/ Y reemplaza el c贸digo por:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/sf_bg"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:layout_gravity="center"     
        android:layout_weight="1"
        android:src="@drawable/sflogov" />

    <ImageButton
        android:id="@+id/btnYegua"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:layout_weight="1"
        android:layout_marginBottom="4dp"
        android:background="@drawable/btn_main"
        android:src="@drawable/yegua" />

 <ImageButton
        android:id="@+id/btnPedo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:layout_weight="1"
        android:layout_marginBottom="4dp"
        android:background="@drawable/btn_main"
        android:src="@drawable/pedo" />

    <ImageButton
        android:id="@+id/btnSilbido"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginBottom="4dp"
        android:background="@drawable/btn_main"
        android:contentDescription="@null"
        android:src="@drawable/silbido" />

    <ImageButton
        android:id="@+id/btnLatigo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_main"
        android:contentDescription="@null"
        android:layout_weight="1"
        android:src="@drawable/latigo" />

</LinearLayout>

Guardamos los cambios y ejecutamos, nuestra aplicaci贸n tiene listo ya la interfaz pero tenemos un peque帽o problema.

Vista Portrait. En esta vista tenemos nuestra aplicaci贸n tal cual la hab铆amos dise帽ado en eclipse.

portrait

Vista Landscape. En la vista Landscape, nuestra aplicaci贸n al tratar de adaptarse a la forma de la pantalla, se a deformado, los botones est谩n muy delgados lo que le da un mal aspecto.

landscape view

Para solucionar este problema tenemos dos soluciones, podr铆amos bloquear la orientaci贸n de la pantalla o utilizar un layout para cada posici贸n, landscape o portrait. A continuaci贸n, llevaremos a cabo la segunda opci贸n.

4. Para hacer uso de un layout para cada posici贸n de la pantalla en android, basta con a帽adir una nueva carpeta “layout-land” para la vista LANDSCAPE a la carpeta RES. De esta forma cuando nuestra aplicaci贸n este en ejecuci贸n, android sabr谩 que layout utilizar seg煤n la orientaci贸n de la pantalla.

En la nueva carpeta聽layout-land, crea un archivo Android XML Layout File (New->Other -> Android ) con el mismo nombre de nuestro layout principal, “activity_main.xml“, eclipse te da varias opciones al crear este archivo, por el momento no nos interesan as铆 que dale FINISH para terminar su creaci贸n.

Nuestro proyecto Android, debe tener el siguiente aspecto:

sound project

El c贸digo XML para el nuevo activity_main.xml es:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/sf_bg"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:paddingBottom="10dp"
        android:src="@drawable/sflogoh" />

    <LinearLayout
        android:id="@+id/LinearLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

            <ImageButton
                android:id="@+id/btnSilbido"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/silbido" />

            <ImageButton
                android:id="@+id/btnLatigo"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/latigo" />

            <ImageButton
                android:id="@+id/btnYegua"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/yegua" />

            <ImageButton
                android:id="@+id/btnPedo"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/pedo" />

    </LinearLayout>

</LinearLayout>

Nuestra vista en landscape esta lista.

lands view

5. Para terminar, abrimos el archivo聽MainActivity.java y reemplazamos el c贸digo por:

package com.tutorial.funnysounds;

import java.io.IOException;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class MainActivity extends Activity  implements OnClickListener {

 private ImageButton btn1,btn2,btn3,btn4;
 private SoundPool soundPool;
 private int yeguaSound, pedoSound, silbidoSound, latigoSound = -1;

 @Override
 protected void onCreate(Bundle savedInstanceState) {

  //-->PARA PANTALLA COMPLETA
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  WindowManager.LayoutParams.FLAG_FULLSCREEN);
  //-->end

  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  //botones
  btn1 = (ImageButton) findViewById( R.id.btnYegua );
  btn2 = (ImageButton) findViewById( R.id.btnPedo );
  btn3 = (ImageButton) findViewById( R.id.btnSilbido );
  btn4 = (ImageButton) findViewById( R.id.btnLatigo );
  btn1.setOnClickListener(this);
  btn2.setOnClickListener(this);
  btn3.setOnClickListener(this);
  btn4.setOnClickListener(this);
  //sonido
  setVolumeControlStream(AudioManager.STREAM_MUSIC);
  soundPool = new SoundPool( 20, AudioManager.STREAM_MUSIC, 0);
  try{
   AssetManager assetManager = getAssets();
   AssetFileDescriptor sound1 = assetManager.openFd("yegua.mp3");
   AssetFileDescriptor sound2 = assetManager.openFd("pedo.mp3");
   AssetFileDescriptor sound3 = assetManager.openFd("silbido.mp3");
   AssetFileDescriptor sound4 = assetManager.openFd("latigo.mp3");
   yeguaSound = soundPool.load( sound1 ,1);
   pedoSound = soundPool.load( sound2,1);
   silbidoSound = soundPool.load( sound3,1);
   latigoSound = soundPool.load( sound4,1);
  }
  catch( IOException ex)
  {
   Log.e("Error de sonido", ex.getMessage() );
  }

 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 @Override
 public void onClick(View arg0) {
  // TODO Auto-generated method stub
  switch ( arg0.getId() ) 
  {
   case R.id.btnYegua  : dale_play( yeguaSound ); break;
   case R.id.btnPedo  : dale_play( pedoSound ); break;
   case R.id.btnSilbido: dale_play( silbidoSound ); break;
   case R.id.btnLatigo : dale_play( latigoSound ); break;
  }
 }

 /**
 * Metodo privado para reproducir sonido
 * @param int id identificador de sonido
 * */
 private void dale_play( int id )
 {
  if( id != -1 )
  {
   soundPool.play( id ,1,1,0,0,1 );
  }
 }

}

Para manejar sonido en android contamos con la API聽SoundPool, con esta api podemos reproducir peque帽os archivos de sonido.

app funny

Codigo Fuente

Proyecto: Funny Sound

IDE: Eclipse Indigo

馃檪

Tags

Si te ha gustado podr铆as compartirlo o dejar un comentario. 隆Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnolog铆a en Bolivia.

Toda la informaci贸n que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si as铆 lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

Tambi茅n Te Podr铆a Interesar

Client REST usando GSON y Volley

Client REST usando GSON y Volley

En este post crearemos un cliente android para consumir un recurso de un REST API utilizando las librer铆as GSON y Volley...

Vibrate: 驴C贸mo hacer vibrar un dispositivo Android?

Vibrate: 驴C贸mo hacer vibrar un dispositivo Android?

En este post crearemos una app para utilizar el vibrador de nuestro dispositivo android usando para ello el IDE Android...

Modificar las pesta帽as de JTabbedPane

Modificar las pesta帽as de JTabbedPane

En este tutorial veremos lo聽f谩cil聽que es personalizar las pesta帽as de un JTabbedPane con unas cuantas lineas de c贸digo y...

Esteganografia LSB en Java – [Proyecto Completo]

Esteganografia LSB en Java – [Proyecto Completo]

Mensajes ocultos utilizando el m茅todo de Inserci贸n en el bit menos significativo (Least Significant Bit Insertion) El m茅...

Ajustar imagen de fondo a diferentes resoluciones

Ajustar imagen de fondo a diferentes resoluciones

Si dise帽amos paginas web, nos habremos topado con el problema de colocar una imagen de fondo y que este se adapte a toda...

Bot贸n M谩gico

Bot贸n M谩gico

Magic Button, es un bot贸n animado para android bajo licencia del MIT desarrollado por聽Bloder (Brasil), el proyecto esta...

Deja un comentario

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

*

Comparte lo que sabes

Categorias

脷ltimas entradas

Las herramientas Online son cada vez m谩s comunes y pueden encontrarse herramientas para casi todo tipo de tareas, en est...

Apache POI es la API de Java para el trabajo con archivos de Microsoft como son Word, Excel y Power Point. Apache POI se...

Gallery.io es una herramienta de colaboraci贸n gratuita desarrollada por Google para cargar trabajos de dise帽o, obtener c...

Android cuenta con una serie de herramientas en su API para el trabajo con gr谩ficos, entre estos podemos mencionar: Bitm...

Android Bolivia

MAUS