2012-01-11 14 views
7

Estoy intentando que los eventos de división táctil funcionen, esto significa que puedo detectar la entrada táctil por separado en varias vistas.Eventos de movimiento dividido: acepta entradas a múltiples vistas simultáneamente

Se trata de una característica añadida a honeycomb y se puede exportar utilizando la biblioteca de compatibilidad. Hay más información aquí: http://developer.android.com/sdk/android-3.0.html -> vaya a "eventos de toque divididas"

Básicamente dice: Anteriormente, sólo una única vista podían aceptar eventos de toque a la vez. Android 3.0 agrega compatibilidad para dividir eventos táctiles entre vistas e incluso ventanas, por lo que diferentes vistas pueden aceptar eventos táctiles simultáneos. Los eventos de división táctil están habilitados de forma predeterminada cuando una aplicación se dirige a Android 3.0. Es decir, cuando la aplicación ha establecido el valor del atributo android: minSdkVersion o android: targetSdkVersion en "11".

Aquí es un proyecto de ejemplo que estoy utilizando para probarlo: https://sites.google.com/site/droidbean/hologramlwp/downloadmodels/attachments/SplitMotionTest.rar?attredirects=0&d=1

En el proyecto hay 2 imageviews, tocando el de arriba produce eventos Log.e con una etiqueta de 'puntero', mientras que la parte inferior view produce 'pointer2' pero como puede ver tocando la vista superior y luego el 2do con un dedo separado (ambos están tocando vistas separadas) produce solo mensajes desde la primera vista en gingerbread.

Si el mismo proyecto se ejecuta en honeycomb, funciona correctamente y ambas vistas producen sus respectivas entradas de registro 'puntero'.

Así que mi pregunta sería, ¿cómo puedo obtener el mismo efecto en un teléfono con gingerbread o cualquier otra versión de Android inferior?

+0

¿Ha intentado utilizar 'onInterceptTouch' para capturar todos los eventos de toque y luego los envían a los puntos de vista? – JiTHiN

Respuesta

1

Dado que Gingerbread no es compatible con la división de eventos táctiles, una solución sería crear una superposición sobre las dos vistas. p.ej. agregue un RelativeLayout vacío después de las otras vistas en el xml o en el código que cubre las dos vistas, llamémosle superposición. Establezca OnTouchListener de la superposición y determine mediante programación qué vista ocurrió el evento (x, y). Luego envíe el evento a la vista determinada en TouchEvent.

Esto no es muy amigable, es por eso que lo arreglaron.

Ejemplo:

public boolean onTouch(View v, MotionEvent event) 
    { 
     if(view1.hitTest(event)) 
     { 
      return view1.onTouchEvent(event); 
     } else if(view2.hitTest(event)) 
     { 
      return view2.onTouchEvent(event); 
     } 
     return false; 
    } 
+0

Gracias, este es el método que tuve que usar. – behelit

Cuestiones relacionadas