Interfaces de usuario [Entradas en Android]

Anuncio
Interfaces de usuario [Entradas en Android]
M. en C. Sergio Luis Pérez Pérez
UAM C UAJIMALPA , M ÉXICO, D. F.
Trimestre 14-P
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
1 / 34
Uso de hilos en Android
Uso de hilos en Android
1
Uso de hilos en Android
2
Eventos de usuario
3
Teclado
4
Pantalla táctil
5
Sensores
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
2 / 34
Uso de hilos en Android
Uso de hilos en Android I
Cada vez que se ejecuta una aplicación en Android el sistema
crea un proceso Linux.
Si es una aplicación Java el proceso la ejecuta sobre su propia
máquina virtual Dalvik.
Si es código nativo se ejecuta directamente.
El proceso contiene un hilo por defecto llamado hilo principal.
Este hilo principal ejecuta los métodos onCreate(), onDraw() y
onKeyDown().
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
3 / 34
Uso de hilos en Android
Uso de hilos en Android II
Si se desea realizar un trabajo intensivo, como esperar datos de
Internet, se debe encargar a otro hilo.
Todo hilo seguirá creado por una aplicación seguirá ejecutándose
aún cuando la aplicación se encuentre en segundo plano.
Otro problema surge cuando dos hilos tratan de acceder a la
misma variable al mismo tiempo.
Para evitar que un hilo lea datos que están siendo modificados
por otro hilo se utiliza la exclusión mutua.
En Java, la exclusión mutua se logra mediante la palabra
reservada synchronized.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
4 / 34
Uso de hilos en Android
Uso de hilos en Android III
synchronized permite definir una región crı́tica.
El proceso que realiza es el siguiente:
1
2
3
Cada vez que se entra a un método o bloque marcado con esta
palabra se pregunta si otro hilo a entrado a la región critica de ese
objeto.
Si ningún otro hilo ha entrado entonces el actual entra
normalmente.
Si otro hilo ha entrado entonces el hilo actual es suspendido y
espera a que termine el que ya estaba dentro.
Las regiones crı́ticas son definidas a nivel de objeto más no de
clase, por lo que las regiones crı́ticas de varias instancias son
independientes.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
5 / 34
Uso de hilos en Android
Uso de hilos en Android IV
La región crı́tica se define por clase, es decir, aunque se haya
utilizado synchronized en varios métodos, en realidad solo
habrá una región crı́tica.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
6 / 34
Eventos de usuario
Eventos de usuario
1
Uso de hilos en Android
2
Eventos de usuario
3
Teclado
4
Pantalla táctil
5
Sensores
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
7 / 34
Eventos de usuario
Eventos de usuario I
Android captura los eventos de forma homogénea y se los pasa a
la clase encargada para procesarlos.
Los eventos serán procesados generalmente por un objeto de tipo
View.
Los eventos son atendidos por: Event Listener y Event Handler.
Un Event Listener es una interfaz de la clase View y contiene un
método callback que debe ser registrado.
A continuación se presentan algunos métodos con sus interfaces
Event Listener:
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
8 / 34
Eventos de usuario
Eventos de usuario II
Event Listener I
onClick: OnClickListener. Es llamado cuando se selecciona un
elemento. Responde a la pantalla táctil, las teclas de navegación
y el trackball.
onLongClick: OnLongClickListener. Es llamado cuando un
elemento es seleccionado por más de un segundo.
onFocusChange: OnFocusChangeListener. Es llamado cuando
se navega dentro o fuera de un elemento.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
9 / 34
Eventos de usuario
Eventos de usuario III
Event Listener II
onKey: OnKeyListener. Es llamado cuando se presiona o se
suelta una tecla.
onTouch: OnTouchListener. Es llamado cuando se presiona, se
suelta o se se desplaza en la pantalla táctil.
onCreateContextMenu: onCreateContextMenuListener. Es
llamado cuando se crea un menú de contexto.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
10 / 34
Eventos de usuario
Eventos de usuario IV
Implementación de un Event Listener. (Clase anónima)
Button boton = (Button)findViewById(R.id.boton);
boton.setOnClickListener( new OnClickListener (){
public void onClick(View vista){
//Instrucciones
}
});
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
11 / 34
Eventos de usuario
Eventos de usuario V
Implementación de un Event Listener. (Implementar interfaz)
public class Ejemplo extends Activity{
public void onCreate(Bundle savedValues){
Button boton = (Button)findViewById(R.id.boton);
boton.setOnClickListener(new Ejemplo());
}
}
public class Ejemplo implements OnClickListener{
public void onClick(View vista){
//Instrucciones
}
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
12 / 34
Eventos de usuario
Eventos de usuario VI
El Event Handler permite crear varios métodos callback para los
descendientes que sean creados a partir de View.
Con Event Handler se pueden utilizar los manejadores por
defecto para los descendientes de View.
Utilizando los métodos por defecto ya no es necesario
implementar las interfaces ni registrar los métodos callback (como
setOnClickListener()).
A continuación se presentan algunos de estos métodos:
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
13 / 34
Eventos de usuario
Eventos de usuario VII
Handle Listener
onKeyDown(int keyCode, KeyEvent e): Es llamado cuando una
tecla es presionada.
onKeyUp(int keyCode, KeyEvent e): Es llamado cuando una
tecla deja de ser presionada.
onTrackballEvent(MotionEvent me): Es llamado cuando se
mueve el trackball.
onTouchEvent(MotionEvent me): Es llamado cuando se
presiona la pantalla táctil.
onFocusChanged(boolean obtenerFoco, int direccion, Rect
rectanguloFoco): Es llamado cuando se cambia el foco.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
14 / 34
Teclado
Teclado
1
Uso de hilos en Android
2
Eventos de usuario
3
Teclado
4
Pantalla táctil
5
Sensores
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
15 / 34
Teclado
Ejemplo 1 I
1
Crear un proyecto y agregar una etiqueta TextView en la actividad
principal.
2
Agregar el siguiente código para que cada que sea presionada
una tecla aparezca algún mensaje en la etiqueta.
3
Cada vez que una tecla es presionada el método onKeyDown es
llamado.
4
El primer parámetro de onKeyDown (int) denota el código de la
tecla presionada y el segundo (KeyEvent) permite obtener la
información relacionada al evento.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
16 / 34
Teclado
Ejemplo 1 II
5
Los eventos de teclado pueden ser recogidos sólo desde aquellas
vistas que tienen la propiedad focusable=“true”.
@Override
public boolean OnKeyDown(int codigoTecla, KeyEvent evento){
super.onKeyDown(codigoTecla, evento);
TextView vista = (TextView)findViewById(R.id.miEtiqueta);
switch(codigoTecla){
case KeyEvent.KEYCODE DPAD UP:{
vista.setText(“Arriba”); }break;
default:{
vista.setText(“Otra tecla”); }break;
}
return true;
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
17 / 34
Pantalla táctil
Pantalla táctil
1
Uso de hilos en Android
2
Eventos de usuario
3
Teclado
4
Pantalla táctil
5
Sensores
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
18 / 34
Pantalla táctil
Pantalla táctil I
La pantalla táctil es el principal dispositivo de entrada.
Mediante la pantalla táctil es posible seleccionar, arrastrar y soltar
cualquier elemento.
También se usa como sustito del teclado en los dispositivos que
no cuentan con uno fı́sico.
Otra forma de utilizar la pantalla es para los gestos (gestures),
soportado a partir del SDK 1.6.
El multi-touch es otra posibilidad disponible a partir del SDK 2.0.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
19 / 34
Pantalla táctil
Pantalla táctil II
El manejo básico de la pantalla táctil es mediante el método
onTouchEvent de un clase View.
El método onTouchEvent devuelve un objeto de tipo MotionEvent.
También se puede implementar mediante la interfaz
onTouchListener.
Los principales métodos de la clase MotionEvent son:
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
20 / 34
Pantalla táctil
Pantalla táctil III
MotionEvent
getAction(): Tipo de acción realizada: ACTION DOWN,
ACTION UP, ACTION MOVE, ACTION CANCEL.
getX(), getY(): Posición de la pulsación.
getDownTime(): Tiempo en milisegundos en que el usuario
presionó por primera vez en una cadena de pulsaciones.
getEventTime(): Tiempo en milisegundos del evento actual.
getPressure(): Estima la presión de la pulsación entre [0, 1].
getSize(): Grosor de la pulsación entre [0, 1].
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
21 / 34
Pantalla táctil
Ejemplo: Pantalla Táctil I
1
Crear un proyecto llamado Pantalla, cuya actividad principal se
llame main.xml.
2
Cambie el layout de la actividad main.xml a un LinearLayout
(Vertical).
3
Agregue una etiqueta TextView (label) y un ScrollView (scroll),
además de otra etiqueta TextView (labelScroll) dentro del
ScrollView.
4
En el método onCreate() de la clase principal (Main.java) haga
referencia a la etiqueta label.
TextView entrada = (TextView) findViewById(R.id.label);
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
22 / 34
Pantalla táctil
Ejemplo: Pantalla Táctil II
5
Cree una clase (PantallaTactil) que implemente la interfaz
OnTouchListener y su método onTouch.
class PantallaTactil implements OnTouchListener{
public boolean onTouch(View vista, MotionEvent evento){
TextView salida = (TextView) findViewById(R.id.labelScroll);
salida.append(evento.toString()+“\n”);
}
}
6
En el método onCreate agregue el siguiente código:
entrada.setOnTouchListener(new PantallaTactil());
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
23 / 34
Sensores
Sensores
1
Uso de hilos en Android
2
Eventos de usuario
3
Teclado
4
Pantalla táctil
5
Sensores
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
24 / 34
Sensores
Sensores I
Los sensores son los dispositivos con los que se puede obtener
información del mundo exterior (con excepción de la cámara, el
micrófono y el GPS).
Se pueden manipular de forma homogénea.
Aunque es posible emular el comportamiento de los sensores
resulta muy laborioso, es mejor contar con algún dispositivo.
Se puede acceder a los sensores internos del dispositivo a través
de las clases: Sensor, SensorEvent, SensorManager y la interfaz
SensorEventListener.
Los sensores pueden variar según el dispositivo.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
25 / 34
Sensores
Sensores II
Clase Sensor
public float getMaximumRange(): Rango máximo en las
unidades del sensor.
public String getName(): Nombre del sensor.
public float getPower(): Potencia usada por el sensor mientras
está en uso.
public float getResolution(): Resolución en las unidades del
sensor.
public int getType(): Tipo genérico del sensor.
public int getVersion(): Versión del sensor.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
26 / 34
Sensores
Sensores III
Algunas constantes de la clase Sensor I
Acelerómetro (TYPE ACCELEROMETER): Mide la aceleración
por gravedad y cambios de movimiento.
Campo magnético (TYPE MAGNETIC FIELD): Brújula, detecta
campos magnéticos.
Giroscopio (TYPE GYROSCOPE): Detecta giros.
Orientación (TYPE ORIENTATION): Indica la dirección a la que
apunta el dispositivo.
Luz ambiental (TYPE LIGHT): Ajusta la iluminación de pantalla.
Proximidad (TYPE PROXIMITY): Indica si hay un objeto a menos
de 5 cm.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
27 / 34
Sensores
Sensores IV
Algunas constantes de la clase Sensor II
Presión atmosférica (TYPE PRESSURE): Altı́metro, barómetro.
Gravedad (TYPE GRAVITY): Mide la aceleración debida a la
gravedad.
Acelerómetro lineal (TYPE LINEAR ACCELERATION): Mide las
aceleraciones debidas a la gravedad.
Vector de rotación (TYPE ROTATION VECTOR): Detecta giros.
Temperatura ambiental (TYPE AMBIENT TEMPERATURE): Mide
la temperatura del aire.
Humedad relativa (TYPE RELATIVE HUMIDITY): Mide el punto
de rocı́o, humedad absoluta y relativa.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
28 / 34
Sensores
Ejemplo: Sensores disponibles I
Antes de utilizar los sensores es necesario conocer los que tiene
disponibles el dispositivo.
1
Crear un proyecto llamado Sensores, cuya actividad principal se
llame main.xml.
2
Cambie el layout de la actividad main.xml a un LinearLayout
(Vertical).
3
Agregue una etiqueta TextView (salida).
4
En el método onCreate() de la clase principal (Main.java) haga
referencia a la etiqueta salida y ponga el siguiente código.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
29 / 34
Sensores
Ejemplo: Sensores disponibles II
TextView salida = (TextView) findViewById(R.id.salida);
SensorManager sensor =
(SensorManager)getSystemService(SENSOR SERVICE);
List<Sensor> listaSensores =
sensor.getSensorList(Sensor.TYPE ALL);
salida.setText(); for(Sensor s: listaSensores){
salida.append(s.getName()+“\n”);
}
5
Ejecute su aplicación y observe los sensores que posee su
dispositivo.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
30 / 34
Sensores
Ejemplo: Acceso a los datos de los sensores
disponibles I
En este ejercicio se desplegarán los datos de los sensores disponibles
conforme cambien en tiempo real.
También se verá la creación de vistas desde código Java.
1
Crear un proyecto llamado SensoresDatos, cuya actividad
principal se llame main.xml.
2
Cambie el layout de la actividad main.xml a un LinearLayout
(Vertical) y cambie su id a layout.
3
Elimine el TextView que aparece por defecto en el layout principal.
4
En la clase principal Main.java agregue dos variables globales a
la clase:
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
31 / 34
Sensores
Ejemplo: Acceso a los datos de los sensores
disponibles II
private TextView arregloEtiquetas[][];
private List<Sensor> listaSensores;
5
Implemente el método onSensorChanged de la interfaz
SensorEventListener como se muestra en la siguiente tabla.
6
Observe que el método onSensorChanged pone todo su código
dentro de una región crı́tica, ¿por qué?
7
En el método onCreate agregue el código que le presente el
profesor.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
32 / 34
Sensores
Ejemplo: Acceso a los datos de los sensores
disponibles III
class EscuchaSensores implements SensorEventListener{
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
@Override
public void onSensorChanged(SensorEvent event) {
synchronized(this){
int n = 0;
for(Sensor sensor: listaSensores){
if(event.sensor == sensor){
for(int i = 0; i < event.values.length; i++){
arregloEtiquetas[n][i].setText(String.valueOf(event.values[i]));
}}
n++;}}}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
33 / 34
Sensores
Ejemplo: Acceso a los datos de los sensores
disponibles IV
8
Ejecute su aplicación y observe como cambian los valores de los
sensores que posee su dispositivo.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Interfaces de Usuario
34 / 34
Descargar