Eventos “Multitouch” en Android

Echando un vistazo a la web Talking Android, he visto un vídeo en el que se muestra como se pueden  tratar varios touch events en el móvil G1. Tenía entendido que actualmente el único dispositivo que realmente conseguía tratar varias pulsaciones en una pantalla táctil era la pantalla del Iphone/Iphone Touch desarrollada por Apple, y no me equivocaba. En el blog de Luke se explica como realmente “funciona” este característica en Android y como llegó hasta lo que podemos ver en el video:

La capacidad multitouch a nivel de hardware como he dicho solo existe actualmente en los productos de Apple; en este dispositivo funciona a nivel de software. En un principio parece que en el driver que utiliza Android para la pantalla, había un par de lineas comentadas con las que se podía conseguir detectar varios eventos táctiles simultáneos, pero para ello, había que recopilar el kernel de sistema operativo. Esto traía muchas complicaciones posteriores y parece que nadie ha seguido trabajando en esa dirección

Pero el daño ya estaba hecho, se había mostrado algo hasta ese momento impensable. El escritor del blog, Luke Hutchison, explica que realmente no hacía falta modificar el driver porque ya emitía las señales multitouch, pero no se llegaban a registrar, simplemente se perdían en el archivo “$ANDROID_HOME/frameworks/base/services/java/com/android/server/KeyInputQueue.java”. Sabiendo esto, para poder aplicar las características multitouch no era necesario recompilar el kernel, pero habría que cambiar clases de las librerías de Java de Android.

La parte donde explica estas modificaciones es algo complicado de entender, intentaré resumirla brevemente, (y sin meterme en especificaciones técnicas), para explicar la idea general. Si alguien esta interesado le remito al blog de Luke Hutchison donde se explica todo el proceso, concretamente :”Implementing functional multitouch on the G1 in a backwards-compatible way”.

Cuando se recibe un evento de que se ha realizado una pulsación, el driver emite una serie de bits de tamaño x, en el que se especifica las coordenadas donde se ha pulsado. Pero este tamaño, no se aprovecha entero, queda hueco disponible que no se utiliza. Este espacio de bits lo aprovecha Luke para introducir información acerca de la segunda pulsación. Para que esto puede ser entendido por Android, es necesario modificar el archivo donde se manejan estos eventos de tal manera que distingue la primera y segunda pulsación mediante un bit significativo. A partir de esta modificación es capaz de distinguir los eventos táctiles para saber si el movimiento es de la primera o de la segunda pulsación.

Esto trae una serie de problemas (se pueden observar en el video), los mas importantes :

  • Cuando se tienen los dos dedos pulsados se crean otros dos (como si se formaran un paralelogramo), y es imposible distinguir entre las parejas, cual es realmente donde se pulso
  • Si las pulsaciones están muy juntas se pueden confundir como el mismo punto.
  • Ciertos problemas con giros en las pulsaciones.

Si necesitais más informacion, o más tecnica os remito al blog, pero me ha parecido curiso comentarlo en esta entrada porque una de las ideas que tenía para el PFC era la de usar ambos dedos para aumentar y disminuir el zoom, aunque actualmente no es algo que entre en mis prioridades.

Via | http://www.talkandroid.com/

Fuente | http://lukehutch.wordpress.com/android-stuff/

Anuncios

2 responses to this post.

  1. Posted by Abe on 13 enero 2009 at 10:38 pm

    anda, pero si tienes un blog, jeje, bueno pos na, aki te dejo mis animos pa ke sigas y avances con el proyecto.

    x cierto cuanto tardastes mas o menos en aprender java, xq me tocara a mi tambien y keria darle caña para tenerlo en septiembre.

    Dandole caña dia a dia cuanto crees ke se puede aprender para empezar a programar cosas decentes.

  2. Posted by Pobla on 13 enero 2009 at 11:35 pm

    ey, pues hombre si tienes tiempo para dedicarlo no vas a tardar muxo e? ademas tu ya diste c++ no? o que lenguaje utilizabas en “poo”. La verdad es que java es bastante intuitivo, yo te recomendaría el libro de Core Java 2, el vol 1 para empezar :), es un buen tocho pero viene todo muy bien explicado y con ejemplos, aunque luego todo depende de las api’s que uses.
    Saludos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: