botones fisicos android

23
Programación Android Rafael Morón Abad [email protected]

Upload: luis-alfredo-lucero-varillas

Post on 18-Oct-2015

69 views

Category:

Documents


0 download

TRANSCRIPT

  • Programacin Android

    Rafael Morn Abad

    [email protected]

  • 3. Android 3.4 Eventos

  • Eventos

    Los eventos son los sucesos que ocurren en un sistema.

    Son nuestra forma bsica de interactuar con el usuario.

    Fuentes tpicas de eventos:

    Pantalla tctil

    Teclado

    Acelermetro

    Los eventos en Android se gestionan mediante clases llamadas Manejadores de Eventos.

    Estas clases se registran para recibir esos eventos

  • Pantalla

    Pueden ser de dos tipos:

    SingleTouch (Monopunto)

    Un nico punto

    MultiTouch (Multipunto)

    Varios puntos a la vez

    Se manejan registrando una instancia de una clase que implemente View.OnTouchListener

    view.setOnTouchListener (OnTouchListener otl);

    x

    y

    (0, 0)

  • Monopunto

    MotionEvent.ACTION_DOWN

    Se toca la pantalla.

    MotionEvent.ACTION_UP

    Se deja de tocar la pantalla.

    MotionEvent.ACTION_MOVE

    Hay desplazamiento tocando la pantalla.

    MotionEvent.ACTION_MOVE

    Se cancela el movimiento. Ocurre cuando la vista pierde el foco.

  • Monopunto (II) public class MyTouchListener implements View.OnTouchListener {

    @Override

    public boolean onTouch(View vista, MotionEvent ev) {

    int accion = ev.getAction();

    switch (accion) {

    case MotionEvent.ACTION_DOWN: // Ha pulsado un punto

    int x = (int)ev.getX(); //Precisin float

    int y = (int)ev.getY(); //Precisin float

    if (vista instanceof MiVista)

    {

    ((MiVista) view).puntoPulsado(x, y);

    }

    break;

    }

    /** El evento fue manejado */

    return true;

    }

    }

  • Multipunto

    MotionEvent se extiende para soportar eventos multipunto.

    Se introdujo en Android 2.0 (API 6), pero los mtodos de Android 2.0 y 2.1 utilizados para MultiTouch se deprecaron.

    A partir de Android 2.2 (Froyo) la sintaxis es estable.

    Se utiliza OnTouchListener y MotionEvent.

    Pero ahora tenemos varios dedos

  • Multipunto (II)

    Utilizaremos ndices e identificadores:

    ndice (PointerIndex)

    Es un nmero que se usa para recorrer las trayectorias. Puede variar si otros dedos tocan la pantalla o dejan de tocarla.

    Identificador (PointerID)

    Es un nmero que identifica la trayectoria. No cambia desde que se toca con un dedo hasta que se levanta de la pantalla.

  • Multipunto (III)

    Ind = 0 ID = 0

    Ind = 1 ID = 1 Ind = 0 ID = 1

  • Multipunto (IV)

    MotionEvent.getPointerCount()

    Nmero de dedos tocando la pantalla.

    MotionEvent.getX(int pointerIndex)

    Devuelve el valor de x para un puntero. Los nmeros van desde 0 a pointerCount -1.

    MotionEvent.getAction()

    Devuelve la accin y el pointer Index junto.

    MotionEvent.ACTION_POINTER_ID_MASK

    Mscara de los bits que contienen el PointerIndex

    MotionEvent.ACTION_POINTER_ID_SHIFT

    Desplazamiento para obtener el PointerIndex

  • Multipunto (V) NDICE:

    int pointerIndex =

    (event.getAction()&

    MotionEvent.ACTION_POINTER_ID_MASK)

    >> MotionEvent.ACTION_POINTER_ID_SHIFT;

    IDENTIFICADOR:

    int pointerId =

    event.getPointerId (pointerIndex);

  • Ejemplo Prctico: Eventos en Pantalla

  • Eventos en Pantalla

    Realizar una aplicacin para Android 2.2 con una vista de texto.

    La vista indicar los eventos que vengan de la pantalla.

  • Teclado

    Los mviles Android tienen 4 botones frontales:

    Botn de Men KeyEvent.KEYCODE_MENU

    Botn de Retorno KeyEvent.KEYCODE_BACK

    Botn de Home KeyEvent.KEYCODE_HOME

    Botn de Bsqueda KeyEvent.KEYCODE_SEARCH

    Fuente: http://androideity.com/2011/10/12/manejando-eventos-de-botones-fisicos/

  • Teclado (II)

    Botones laterales:

    Botn de Encendido

    KeyEvent.KEYCODE_POWER

    Botn de Cmara

    KeyEvent.KEYCODE_CAMERA

    Botones de Volumen

    KeyEvent.KEYCODE_VOLUME_UP

    KeyEvent.KEYCODE_VOLUME_DOWN

    Botn de Cascos

    KeyEvent.KEYCODE_HEADSETHOOK Fuente: http://androideity.com/2011/10/12/manejando-eventos-de-botones-fisicos/

  • Teclado (III)

    Otros botones opcionales:

    Joystick (DPAD)

    KEYCODE_DPAD_CENTER, KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHT

    Teclado numrico / alfanumrico

    KEYCODE_0, KEYCODE_1, KEYCODE_2, , KEYCODE_9 , KEYCODE_A, , KEYCODE_Z

    Fuente: http://androideity.com/2011/10/12/manejando-eventos-de-botones-fisicos/

  • Teclado (IV)

    Los eventos de teclado los maneja por defecto la clase Activity.

    Pero para cada vista podemos cambiarlo:

    View.setOnKeyListener(OnKeyListener l);

    El nuevo listener debe redefinir onKey:

    boolean onKey(View v, int keyCode, KeyEvent

    event);

    El retorno indica si la pulsacin fue tratada.

  • Teclado (V)

    Los eventos de teclado los maneja por defecto la clase Activity.

    Pero para cada vista podemos cambiarlo:

    View.setOnKeyListener(OnKeyListener l);

    El nuevo listener debe redefinir onKey:

    boolean onKey(View v, int keyCode, KeyEvent event);

    El retorno indica si la pulsacin fue tratada.

  • Teclado (VI) Para la Activity, redefinimos algunos mtodos:

    public boolean onKeyDown(int keyCode, KeyEvent msg)

    Es llamada cuando se pulsa una tecla.

    public void onBackPressed()

    Es llamada por la implementacin por defecto de onKeyDown cuando se pulsa Atrs. Si hemos redefinido onKeyDown, tenemos que llamar a onBackPressed en la redefinicin.

    public boolean onKeyLongPress (int keyCode, KeyEvent event)

    Es llamada por una pulsacin mantenida

    public boolean onKeyUp (int keyCode, KeyEvent event)

    Maneja el fin de pulsacin de una tecla. Normalmente no se redefine ya que muchas veces no trataremos este caso.

  • Teclado (VII) @Override

    public boolean onKeyDown(int keyCode, KeyEvent msg) {

    if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {

    // No hacer nada

    this.mov = Move.NONE;

    return (true);

    }

    if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {

    // No hacer nada

    this.mov = Move.NONE;

    return (true);

    }

    if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {

    //Mover a la izquierda

    this.mov = Move.LEFT;

    update();

    return (true);

    }

  • Teclado (VIII)

    if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {

    //Mover a la derecha

    this.mov = Move.RIGHT;

    update();

    return (true);

    }

    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {

    //Disparar

    fire();

    update();

    return (true);

    }

    return true; //Ignorar el resto de teclas

    }

  • Ejemplo Prctico: Eventos de Teclado

  • Eventos de Teclado

    Realizar una aplicacin para Android 2.2 con una vista de texto.

    La vista indicar los cdigos de las teclas que se pulsen. Si se trata de una de las teclas frontales, tambin se indicar cul es (MENU, BACK, SEARCH).