¿Cómo detectar un toque de pantalla que ya existe cuando se crea la actividad?

Tengo una aplicación que se utiliza al aire libre, en todas las condiciones. Estos están en las tabletas de B & N Nook con Android 2.1. Tienen detección táctil óptica, no presión, por lo que una gota de lluvia grande en la pantalla puede "desactivar" el dispositivo, ya que se está detectando como una prensa, y luego no se detectan todas las otras prensas.

Primera parte: en la actividad que se está usando, detecto manualmente prensas de pantalla largas (10 segundos), consistentes con una gota de lluvia que comienza una prensa de bloqueo. Utilizo dispatchTouchEvent () para esto y está bien.

Segunda parte: Entonces abro una nueva actividad y en realidad rodeo la gota de lluvia y le digo al usuario "limpie esta gota de lluvia". La nueva actividad se abre bien, y puedo dibujar círculos con éxito en cualquier lugar que me plazca.

El problema es que la nueva actividad no recibe ningún evento táctil para esa primera prensa … la larga prensa que aún no se ha detenido. No conseguir un "nuevo" ACTION_DOWN es comprensible … Ya agarré eso. Si levanto mi dedo sin embargo, tampoco hay ACTION_UP. Después de levantar la prensa inicial, todo funciona bien: Puedo tocar la pantalla, al instante un círculo se dibuja alrededor del lugar, y se moverá si arrastro mi dedo, por lo que no hay problemas.

¿Cómo puedo obtener la prensa inicial , la que me trajo aquí, que todavía existe? Debe algún tipo de API de sondeo, no un evento, ya que realmente quiero el estado actual y sé que el evento ya está absorbido. Para estar claro, NO hay eventos saliendo de dispatchTouchEvent () hasta que primero quite el dedo de la pantalla (incluso el apagado no crea un evento detectable).

( Podía agarrar las coordenadas de la actividad anterior y pasarla … pero el problema es que la gota de lluvia podría resbalar durante el período de espera de 10 segundos y prefiero que la actividad sea autónoma en hacer su trabajo).

No estoy seguro de que pueda (aunque nunca lo he intentado). Estoy seguro de que los eventos táctiles se cancelarán tan pronto como se abra la nueva Actividad.

El enfoque que puede decidir en su lugar es utilizar la API de Framgents o simplemente abrir una nueva vista en la parte superior de la vista que se está tocando.

La vista que está recibiendo eventos táctiles continuará haciéndolo hasta que ocurra uno de estos eventos:

  1. El método onTouchEvent() devuelve false . Si devuelve false en cualquier momento, dejará de recibir eventos táctiles todos juntos. Es decir, si devuelve false en una acción ACTION_MOVE, no recibirá una acción ACTION_UP.

  2. Recibe un ACTION_CANCEL que indica que el gesto ha terminado. Por lo general significa que el toque dejó los límites de la vista, pero podría ser una serie de razones.

  3. Recibirá un ACTION_UP que significa que el último dedo conmovedor se levantó de la vista.

Las vistas en la parte posterior siempre recibirán eventos táctiles, siempre y cuando las vistas en la parte frontal devuelvan false para las acciones que la mayoría hace de forma predeterminada. Así que si sólo aparece una nueva vista en la parte superior de la vista que está grabando los toques, sólo mantener la grabación y pasar las coordenadas de dibujo a la vista superior.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.