sesión 1: pantalla táctil y acelerómetro€¦ · sensor,sensormanager.sensor_delay_normal);...

20
Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles © 2011-2012 Depto. Ciencia de la Computación e IA Sensores de los dispositivos Sesión 1: Pantalla táctil y acelerómetro

Upload: others

Post on 21-Sep-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2011-2012 Depto. Ciencia de la Computación e IA

Sensores de los dispositivos

Sesión 1: Pantalla táctil y acelerómetro

Page 2: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Puntos a tratar• Entrada en dispositivos móviles• Pantalla táctil• Eventos multitouch• Reconocimiento de gestos• Acceso a sensores• Aceleración• Orientación

2

Page 3: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Entrada en dispositivos móviles

• No hay teclado y ratón, pero ...

• Si que tenemos:• Pantalla táctil• Multitouch• Acelerómetro• Giroscopio• Brújula• GPS y red celular• Micrófono• Cámara

3

Page 4: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Pantalla táctil

• Principal forma de entrada en móviles Android

• Gesto• Comienza al poner un dedo en la pantalla• Continúa mientras el dedo se mueve• Termina al levantarlo

• Captura de eventos touch• Implementar un objeto OnTouchListener• Sobrescribir onTouchEvent de View

4

Page 5: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Evento de touch

• Recibimos datos del evento en MotionEvent

• Devolvemos• true para seguir recibiendo eventos del gesto• false en caso contrario

5

public  class  MiComponente  extends  View        ...        @Override        public  boolean  onTouchEvent(MotionEvent  event)  {                //  Procesar  evento                return  true;        }        ...}

Page 6: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Tipos de eventos touch

• Con getAction de MotionEvent• ACTION_DOWN

Comienzo del gesto. Se pone el dedo en la pantalla.• ACTION_MOVE

Continuación del gesto. El dedo se mueve a otra posición de la pantalla.

• ACTION_UPFin del gesto. Se levanta el dedo de la pantalla.

• ACTION_CANCELFin del gesto. Otro componente toma el control.

• Obtenemos coordenadas con getX y getY

6

Page 7: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Ejemplo sencillo

7

@Overridepublic  boolean  onTouchEvent(MotionEvent  event)  {        if(event.getAction()  ==  MotionEvent.ACTION_MOVE)  {                x  =  event.getX();                y  =  event.getY();                                          this.invalidate();        }        return  true;}

Fuerza a repintar el componente

Page 8: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Multitouch

• MotionEvent contiene un array de punteros• Índices de 0 a getPointerCount• Posición de un puntero

getX(indice), getY(indice)• Los índices pueden cambiar

8

0 0

1 0

Page 9: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Identificadores

• Cada puntero tiene un identificador• El identificador es propio de cada gesto• Obtener el identificador de un índice

getPointerId(indice)

• Buscar un puntero dado su identificadorfindPointerIndex(id)

9

0 0

1 1

Page 10: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Punteros secundarios

• Nuevos tipos de eventos• ACTION_POINTER_DOWN

Un puntero se pone en la pantalla habiendo ya otro.• ACTION_POINTER_UP

Un puntero se quita de la pantalla quedando otro en ella.

• Separar acción e índice del evento

10

final  int  accion  =  event.getAction()  &  MotionEvent.ACTION_MASK;final  int  indice  =  (event.getAction()  &                                  MotionEvent.ACTION_POINTER_INDEX_MASK)                                  >>  MotionEvent.ACTION_POINTER_INDEX_SHIFT;

Page 11: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Reconocimiento de gestos

• Gesture detectors• Clases que encapsulan reconocimiento de gestos• Nos permiten reconocer gestos de alto nivel

• GestureDetector reconoce• Single tap• Double tap• Scroll• Fling (lanzamiento)• Mantener

• ScaleGestureDetector reconoce pinch

11

Page 12: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Gestos simples (I)

• Listener con eventos de alto nivel

12

class  ListenerGestos  extends                            GestureDetector.SimpleOnGestureListener  {        @Override        public  boolean  onDown(MotionEvent  e)  {                                    return  true;        }          @Override        public  boolean  onDoubleTap(MotionEvent  e)  {                //  Tratar  el  evento                return  true;        }}

¡Muy importante! Para seguir procesando el gesto

Page 13: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Gestos simples (II)

• Llamamos al detector en onTouchEvent

13

GestureDetector  detectorGestos;          public  ViewGestos(Context  context)  {        super(context);          ListenerGestos  lg  =  new  ListenerGestos();        detectorGestos  =  new  GestureDetector(lg);        detectorGestos.setOnDoubleTapListener(lg);}          @Overridepublic  boolean  onTouchEvent(MotionEvent  event)  {        return  detectorGestos.onTouchEvent(event);}

Page 14: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Sensores

• Accesibles mediante SensorManager

• Se representan con Sensor

14

• Aceleración • Orientación• Brújula• Giroscopio

• Luz• Proximidad• Temperatura• Presión

SensorManager  sensorManager  =  (SensorManager)        getSystemService(Context.SENSOR_SERVICE);Sensor  sensor  =  sensorManager        .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

Page 15: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Listener de sensores

15

class  ListenerSensor  implements  SensorEventListener  {          public  void  onSensorChanged(SensorEvent  sensorEvent)  {                //  La  lectura  del  sensor  ha  cambiado        }                  public  void  onAccuracyChanged(Sensor  sensor,  int  accuracy)  {                  //  La  precisión  del  sensor  ha  cambiado        }  }

Page 16: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Lecturas del sensor

• Comenzar las lecturas

• Detener las lecturas (IMPORTANTE)

16

{SENSOR_DELAY_FASTERSENSOR_DELAY_GAME

SENSOR_DELAY_NORMALSENSOR_DELAY_UI

ListenerSensor  listener  =  new  ListenerSensor();sensorManager.registerListener(listener,        sensor,  SensorManager.SENSOR_DELAY_NORMAL);

sensorManager.unregisterListener(listener);

Page 17: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Aceleración

17

values[0]

values[1]

values[2]

Page 18: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Orientación

18

values[0]

values[1]values[2]

Page 19: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

Combinar sensores

• El sensor ORIENTATION está desaprobado

• Podemos mejorar la orientación combinando• Acelerómetro• Brújula

19

float[]  values  =  new  float[3];  float[]  R  =  new  float[9];  SensorManager.getRotationMatrix(R,  null,        valuesAcelerometro,  valuesBrujula);  SensorManager.getOrientation(R,  values);

Page 20: Sesión 1: Pantalla táctil y acelerómetro€¦ · sensor,SensorManager.SENSOR_DELAY_NORMAL); sensorManager.unregisterListener(listener); Especialista Universitario en Desarrollo

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Sensores © 2011-2012 Depto. Ciencia de la Computación e IA Pantalla táctil y acelerómetro

¿Preguntas...?

20