2011-02-10 10 views
10

Estamos desarrollando una aplicación donde necesitamos capturar MotionEvents desde múltiples vistas simultáneamente. Cuando intentamos hacerlo, Android solo distribuye eventos a la primera vista tocada y, al tocar otra vista simultáneamente, nos da un ACTION_POINTER_DOWN solo en la primera vista, incluso si las coordenadas del puntero están fuera de sus límites y dentro de las otras vistas ' .Multiple Views OnTouch Events

¿Hay alguna manera de que podamos enviar eventos a cada vista que se haya visto (en llamadas separadas a OnTouch)?

Creemos que interceptar los eventos táctiles desde una vista principal y luego distribuirlos manualmente a cada vista podría funcionar, pero incluso si lo hace, no sería práctico para lo que estamos tratando de lograr. hay una manera mas facil?

Respuesta

6

El evento táctil aparece por primera vez en la vista actualmente en foco. Si tocó 1 vista y tiene el evento "consumido" y está trabajando con él, cualquier otro evento se enviará a esta vista, sin importar dónde haga clic.

Si devuelve false de su touchListener (lo que significa que el evento no se consume) será delegado a otras vistas, pero en otro evento nuevo clic se enviará a otra vista.

http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775

http://developer.android.com/guide/topics/ui/ui-events.html

+1

Estoy teniendo el mismo problema, es decir, la vista enfocada se mueve si toco un lugar en la pantalla, ¿me pueden ayudar con esto? –

10

Al menos Android 3.0 añade soporte para los eventos de toque división entre múltiples puntos de vista.

Split touch events está habilitado de forma predeterminada cuando AndroidManifest <uses-sdk> define android:minSdkVersion="11" o android:targetSdkVersion="11". Para obtener una explicación, vea android:splitMotionEvents y android:windowEnableSplitTouch

0

Si bien esto debería funcionar automáticamente con Android SDK 11+, no funcionaba para mi aplicación. Intentaba capturar toques en una vista principal, más algunas vistas que eran subvistas de la vista principal; en ese caso, los toques solo fueron capturados por el "nivel" de vista que recibió el primer toque. Reorganicé la estructura de mi vista para que todos los puntos de vista fueran hermanos y ahora están capturando eventos como se esperaba.