You are on page 1of 23

Programacin Android

Rafael Morn Abad rafaelmoron@gmail.com

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);
(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 = 0 1 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).

You might also like