IDIOMAS

Google-Translate-Chinese Google-Translate-Spanish to French Google-Translate-Spanish to German Google-Translate-Spanish to Japanese Google-Translate-Spanish to English Google-Translate-Spanish to Russian Google-Translate-Spanish to Portuguese Google-Translate-Spanish to Italian

lunes, 30 de marzo de 2015

Como crear un POPUP WINDOW en Android Studio. Ejemplo con código XML y Java

Hoy vamos a crear un ejemplo de POPUP en Android Studio. Muy simple, con su código XLM y JAVA que podrás copiar y pegar en tu propio proyecto y experimentar con él. Vamos allá.

Aquí el código XLM del MAIN LAYOUT, con un botón y su texto indicativo:

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

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="0dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp" />
    <Button
        android:id="@+id/open_popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Abrir Popup"
        android:textSize="35dp"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>


Ahora, el XLM del POPUP:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@android:color/background_light">
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@android:color/holo_green_dark"
        android:gravity="center"
        android:layout_marginTop="0dp"
        >
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_margin="20dp"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="40dp"
            android:layout_alignParentTop="true"
            android:layout_marginTop="40dp">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/Info_popup"
                android:id="@+id/textView" />

            <ImageView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_ej_trucos" />
            <Button
                android:id="@+id/id_cerrar"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Cerrar" />
        </LinearLayout>
    </RelativeLayout>


En este ejemplo, si lo copiamos y pegamos tal cual, nos encontraremos, que el nombre de la imagen aparecerá en rojo, y es porque no tienes la imagen en la carpeta DRAWABLE. En mi caso, he encontrado un icono de Android y le he puesto este nombre: ic_ej_trucos. Tu puedes escoger la imagen que quieras con el nombre que quieras.

Ahora, el código JAVA, en el MainActivity:


public class MainActivity extends ActionBarActivity {

    Button btn_Abrir_Popup;
    Button btn_Cerrar;
    LayoutInflater layoutInflater;
    View popupView;
    PopupWindow popupWindow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        btn_Abrir_Popup = (Button)findViewById(R.id.open_popup);
        btn_Abrir_Popup.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View arg0) {
        layoutInflater =(LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
        popupView = layoutInflater.inflate(R.layout.popup, null);
        popupWindow = new PopupWindow(popupView,RadioGroup.LayoutParams.WRAP_CONTENT,
                        RadioGroup.LayoutParams.WRAP_CONTENT);

        btn_Cerrar = (Button)popupView.findViewById(R.id.id_cerrar);
        btn_Cerrar.setOnClickListener(new Button.OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        popupWindow.dismiss();
                    }});

                popupWindow.showAsDropDown(btn_Abrir_Popup, 50, 0);

            }});
    }


Tenemos que llamar el servicio LAYOUT_INFLATER_SERVICE y al método .INFLATE para poder crear el POPUP y llamar a su LAYOUT.

Podemos colocar el POPUP en qualquier posición de la pantalla cuando llamemos a .showAsDropDown ya que nos pedirá el botón el cual llama y las coordenadas en un entero (int) para el eje X y eje Y:

 popupWindow.showAsDropDown(btn_Abrir_Popup, 50, 0);

Este es el resultado de la compilación:






Al dar clic en el botón:








Saludos a tod@s y gracias por la visita!


martes, 24 de marzo de 2015

Sonido en Android Studio: clase SOUNDPOOL.

La SOUNPOOL CLASS es sin duda la clase más utilizada para reproducir archivos de audio en dispositivos Android por la inmediatez en que el sistema llama a estos archivos y la posibilidad de reproducción de múltiples sonidos a la vez.

SOUNPOOL en inglés significa "piscina de sonido". Así define el espacio en la memoria donde se "llena" de los archivos que vamos a utilizar para la reproducción. De ahí su inmediatez, ya que permanecen preparados para su uso reduciéndose el lag ( latencia ). Esta clase utiliza también el servicio MEDIAPLAYER.

Esta CLASS es la más utilizada en vídeo juegos para lanzar sonidos de animales, explosiones, ruidos, efectos... Los archivos que ejecuta no superan 1 MB de memoria, siendo mucho menos lo recomendable para no sobrepasar la capacidad del Theard donde trabajamos. También nos pernite hacer sonar varios Streams simultáneamente como hemos mencionado anteriormente.

Podemos elaborar el Constructor y modificar los atributos y parámetros completamente a nuestro antojo, además de poder reproducir archivos en diferentes formatos de archivo, siendo .ogg el formato preferido y recomendable en SOUNDPOOL. Los archivos WAV dan algun que otro problema.

(más información en http://developer.android.com/reference/android/media/SoundPool.html).

Os muestro algunos ejemplos con los que podemos operar con esta CLASS.


Esta linea de código es para el método ONCLICKLISTENER y ONLOADCOMPLETELISTENER desde una carpeta RAW:



package com.example.cinta.myapplication;

import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity {

    Button play;
    int soundId;
    SoundPool sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        play = (Button) findViewById(R.id.bt_play);
        sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 1);
        soundId = sp.load(this, R.raw.ejemploaudio, 1);

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sp = new SoundPool(16, AudioManager.STREAM_MUSIC, 0);
                sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

                    @Override
                    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                        soundPool.play(soundId, 1f, 1f, 1, 0, 1f); //.play nos pide el int de nuestra canción, un //int float de volumen tanto derecho como izquierdo que van de 0.0=0% a 1.0=100%, el int de loop //donde -1 es reproducción en loop, 0 reproduce una vez y 1 repite sólo una vez, y por último tenemos //un int de Rate que va de 0.5 a 2 y modifica la velocidad de pitch donde 1.0 seria la velicidad normal
                    }
                });

            }
        });
        sp.load(this,R.raw.ejemploaudio, 1);
    } 



Este es un ejemplo con un método ONCLICK asignado por nosotros con el nonbre play_sound al botón:



package com.example.cinta.myapplication;

import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity {

    Button play;
    SoundPool sp;
    int soundId;
 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     
        play = (Button) findViewById(R.id.bt_play);
        sp = new SoundPool(1,AudioManager.STREAM_MUSIC,1);
        soundId = sp.load(this, R.raw.ejemploaudio, 1);

        }

    public void play_sound(View view) {

      sp.play(soundId,1,1,1,0,0);
}



Este es un ejemplo con GETASSETS y ASSETSFILEDESCRIPTOR en una carpeta ASSETS:



package com.example.cinta.myapplication;

import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import java.io.IOException;


public class MainActivity extends ActionBarActivity {

    Button play;
    AssetManager   assetManager;
    SoundPool sp;
    int soundId;
    AssetManager AM;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        play = (Button) findViewById(R.id.id_bt_play);
        sp = new SoundPool(1,AudioManager.STREAM_MUSIC,1);
     
        AM = getAssets();
        AssetFileDescriptor sound1 = null;
        try {
            sound1 = AM.openFd("ejemploaudio");
        } catch (IOException e) {
            e.printStackTrace();
        }

        soundId = sp.load(sound1,1);

}

 play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sp = new SoundPool(16, AudioManager.STREAM_MUSIC, 0);
                sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

                    @Override
                    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                        sp.play(soundId, 1f, 1f, 1, 0, 1f);
                    }
                });

            }
        });
        sp.load(sound1,1);
    }




El Contructor para las diferentes versiones de SDK ( API 21 ) es:

//dentro de OnCreade
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            AudioAttributes aa = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .build();

            sp = new SoundPool.Builder()
                    .setMaxStreams(1)
                    .setAudioAttributes(aa)
                    .build();
            soundId = sp.load(this, R.raw.ejemploaudio, 1);

        } else {
            sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 1);
            soundId = sp.load(this, R.raw.ejemploaudio, 1);
        }
//después podemos llamar a .setOnClickListener


Saludos a tod@s y gracias por la visita!


domingo, 15 de marzo de 2015

Como colocar y ajustar un icono PNG o JPG personalizado dentro un TEXTVIEW en Android Studio.

Si estamos creando una app y queremos insertar un icono .png o .jpg dentro de un TEXTVIEW, aquí os dejo un sencillo ejemplo:

- creamos el TEXTVIEW. Seleccionamos, arrastramos al centro de nuestro LAYOUT, y soltamos. Les daremos un TEXTSIZE de 50dp con un texto "TÍTULO" para este ejemplo:













- Colocar el icono escogido en una carpeta DRAWABLE. Hay que tener en cuenta que existen diferentes medidas de píxels para cada pantalla de dispositivo. Para esta ocasión las medidas son de 72px x 72px. Explicaré con más detalle en otra entrada como relacionar dimensión px con pantalla dispositivo ( size screen ) en las diferentes carpetas DRAWABLE:







- acceptamos en ambos casos:










- ahora nos vamos a buscar las propiedades que están en la parte inferior derecha de nuestra interface del programa y hacemos clic sobre este icono:








- nos aparecen unas opciones de propiedades escritas en cursiva que estaban escondidas. Debemos buscar una que se llama DRAWABLESTAR o DRAWABLELEFT para insertar un icono por delante del TÍTULO. 







- buscamos las opciones de esta propiedad:





- en la pestaña PROJECT, apartado DRAWABLE, buscamos el nombre con el que hemos colocado nuestro icono en la carpeta DRAWABLE: de la compilación:










- al dar OK, nos aparece en nuestro LAYOUT:







- una vez tenemos el icono, podemos reajustar su posición en respecto al texto con la siguiente propiedad DRAWABLEPADDING. Le daremos un valor de 25px:






- al darle este valor en la propiedad, nuestro icono se va a desplazar respecto nuestro texto tal como así:







También existe la posibilidad de colocar nuestro icono a la derecha, arriba o abajo de nuestro texto:
















e incluso en multi-posición:





También podemos hacerlo directamente en en el XLM:






Saludos a tod@s y gracias por la visita!


















jueves, 12 de marzo de 2015

Como personalizar el estado de un botón TOOGLE BUTTON con iconos PNG y JPG en Android Studio

Si queremos personalizar los botones de nuestra app con los estados accionado y des accionado, tenemos que crear un nuevo DRAWER RESOUCE.

Vamos a ver el ejemplo que os propongo paso a paso para un TOGGLE BUTTON:

- devemos colocar en posición PROJECT nuestro menú desplegable de la compilación para poder colocar dentro la carpeta DRAWABLE nuestros iconos. Para nuestro ejemplo, un play y un stop en .png :





- arrastramos dos dos iconos hasta la carpeta y soltamos:







- damos OK en las siguientes opciones:







- quedando:







- una vez alojados los iconos, debemos crear el nuevo DRAWER RESOUCE ( el valor del dibujo en archivo XLM ) de la siguiente manera:

           DRAWABLE => NEW => DRAWABLE RESOUCE FILE






- le ponemos como nombre, por ejemplo, estado_play_stop y damos OK :






- ahora debemos colocar este código en la nueva pestaña XLM que hemos creado:

<item android:drawable="@drawable/stop"
        android:state_checked="true" />

    <item android:drawable="@drawable/play"
        android:state_checked="false"/>






- en el TEXTO XLM de nuetra ACTIVITY principal, debemos hacer esto para que no nos aparezca las letras ON y OFF que vienen por defecto en TOGGLE BUTTON de Android:






- después, nos dirigimos a las PROPIEDADES de botón y damos clic en las opciones de BACKGROUND para cargar nuestro valor:





- nos aparece este menú de RESOUCE. Debemos buscar el nombre del valor que hemos creado:





- si vamos más abajo, en el apartado DRAWABLE de la pestaña PROJECT:






- selecionamos y damos OK:






- nos aparece automáticamente en nuestra ACTIVITY principal el TOGGLE BUTTON con la forma de nuestro icono:






- si arrancamos el emulador, nos aparece el botón en estado false = play





- y si lo accionamos, nos aparece el siguiente estado true = stop







Espero que les sirva de ayuda.
Saludosa tod@s  y gracias por la visita!










miércoles, 11 de marzo de 2015

Como cambiar la FUENTE de nuestra aplicación Android en Android Studio

Si queremos cambiar la fuente por defecto con la que se diseña las App en Andrid Studio, tenemos que crear una carpeta ASSETS en la compilación de nuestra proyecto y alojar allí nuestra nueva fuente con la extensión .ttf.

En mi entrada de blog anterior explico cómo crearla:
 http://trucosandroidstudio.blogspot.com.es/2015/03/como-crear-las-carpetas-raw-y-assets.html ) 

He escogido la fuente MixBrush para el ejemplo con un texto "hola mundo".

Una vez creada la carpeta, haremos:

- botón derecho sobre ASSETS => NEW => crear nuevo DIRECTORY (directorio):





- nombrar el nuevo directorio con el nombre que queramos, por ejemplo font , y aceptamos:




- quedando así:





- una vez escogemos la fuente sólo hay que arrastrala desde la ventana origen ( puede ser la de descargas, una memoria usb, etc...) hasta la nueva carpeta directorio FONT y soltar:





- y aceptamos en ambos casos:








- quedando así:





Ahora que ya tenemos la carpeta ASSETS con el nuevo directorio FONT y nuestro archivo de .ttf en ella, vamos con el ejemplo para un TEXTVIEW en nuestra ACTIVITY principal ( activity_main.xml  por defecto ) donde escribiremos HOLA MUNDO, con la fuente por defecto:





Ahora desde nuestro MAIN_ACTIVITY de código java, vamos a escribir este código:


public class MainActivity extends ActionBarActivity {

    TextView TV;     //desclaramos nuestroTEXTVIEW de nuestro LAYOUT 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TV = (TextView)findViewById(R.id.TV_id);   //definimos en ONCREATE donde esta por                                                                                                     //medio de un ID

        String font_path = "font/MixBrush.ttf";  //definimos un STRING con el valor PATH ( o ruta por                                                                                    //donde tiene que buscar ) de nuetra fuente

        Typeface TF = Typeface.createFromAsset(getAssets(),font_path);

                               //llamanos a la CLASS TYPEFACE y la definimos con un CREATE desde                                                    //ASSETS con la ruta STRING

        TV.setTypeface(TF);   //finalmente aplicamos TYPEFACE al TEXTVIEW

    }


Aquí el resultado en pantalla en el emulador:





Saludos a tod@s y gracias por visitarme!