«

»

dic 22 2011

Triple tap en Android

En el desarrollo del actual proyecto que tengo entre manos me he encontrado con el problema de que la libreria de gestos y eventos de pantallas de Android es bastante pobre por no decir casi inexistente. El reto al que me enfrentaba era detectar una triple pulsacion a dos dedos en la pantalla y aunque de primeras y despues de googlear un poco parecia que iba a ser una tarea dificil nada mas lejos de la realidad. Al final ha bastado con un sencillo algoritmo que os paso a mostrar y a explicar a continuación.

La idea es la siguiente, cada vez que pulsemos la pantalla preguntamos cuantos puntos de contacto existen (dedos) y actuamos solo si son dos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();

switch(action & MotionEvent.ACTION_MASK) {

case MotionEvent.ACTION_POINTER_DOWN:
// multitouch!! - touch down
int count = event.getPointerCount(); // Number of 'fingers' in this time

if (count == 2) {
if (i == 2) {
i = 0;
finish();
} else if (i == 1) {
i++;
} else {
i++;
new timer().execute();
}
}

break;
}

return false;
}

Cada vez que pulsemos y gracias a un contador preguntaremos si es la primera, segunda o tercera vez, actuando en consecuencia. Lo mas importante a tener en cuenta es que la primera vez que pulsamos lanzaremos una tarea asincrona que se encargara de poner el contador a 0 despues de X segundos, teniendo que realizarse el triple click antes de finalizar este tiempo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class timer extends AsyncTask {

@Override
protected Void doInBackground(Void... arg0) {

SystemClock.sleep(1000);

return null;
}

@Override
protected void onPostExecute(Void result) {
i = 0;
}
}

Espero que os sirva de ayuda, pronto mas.
via | Ingens Networks

Acerca del autor

JMPergar

Mobile Developer at @BeRepublic & Founder of @AndroCode. Silver Speaker & Member of Core Team at @GDGBarcelona.

  • http://desandroid.com DesAndrOId

    Muy bueno si señor, esto es lo que a mí me gusta, imaginación al poder.

    Gracias.