DrawerLayout evita la llamada de MainActivity.onTouchEvent ()

Tengo una aplicación que reemplaza el onTouchEvent(MotionEvent ev) de la MainActivity para determinar Two-Finger-Swipe y Pich-Open / Pinch-Close . Todo funciona bien hasta que agregue el DrawerLayout a la aplicación (como se describe en Creación de un cajón de navegación ). Problema: el DrawerLayout evita la llamada de onTouchEvent() en MainActivity.

Comencé a escribir un CustomDrawerLayout , e intento DrawerLayout métodos de onInterceptTouch() y onTouchEvent() .

La única manera (que encontré) para transmitir el TouchEvent a la MainActivity:

  // onTouchEvent of CustomDrawerLayout @Override public boolean onTouchEvent(MotionEvent ev){ // super.onTouchEvent(ev); // prevent transmission of TouchEvent return false; } 

El problema aquí es que el cajón no abre correctamente. El cajón se atasca como se describe en este post: DrawerLayout quedarse atrapado en el golpe .

¿Es posible transmitir el TouchEvent a MainActivity para manejar el MultiTouchDetection? ¿O tengo que manejar esto en CustomDrawerLayout ?

ACTUALIZACIÓN 1

Primero tengo que decir que el cajón sólo se atasca, si golpeo desde el borde izquierdo. Al hacer clic en el DrawerIcon en el ActionBar el cajón funciona bien. La transmisión de TouchEvent funciona con el código siguiente. Pero sólo si el cajón está abierto! De lo contrario Activity.onTouchEvent no se llama!

  // onTouchEvent of CustomDrawerLayout @Override public boolean onTouchEvent(MotionEvent ev){ // super.onTouchEvent(ev); // still prevents transmission of TouchEvent activity.onTouchEvent(ev); return true; } 

Al abrir el cajón con un golpe desde el borde (-> cajón de los atascos) tengo un comportamiento muy extraño:

  • Sólo DrawerIcon puede cerrar "cajón estancado" (-> no esperaría algo diferente porque anular el CustomDrawerLayout.onTouchEvent )
  • Si cierro el cajón estancado por DrawersIcon el CustomDrawerLayout.onTouchEvent todavía se llama

¡Eso es extraño! ¿Por qué no se llama Activity.onTouchEvent() ? ¿Y cómo puedo evitar el cajón estancado?

ACTUALIZAR 2

Ahora anular el CustomDrawerLayout.onInterceptTouch() :

 @Override public boolean onInterceptTouchEvent(MotionEvent ev){ return true; } 

Esto tiene el efecto de que el cajón no puede ser abierto por un golpe desde el borde -> sólo el DrawersIcon puede abrir y cerrar el cajón. Pero ahora el TouchEvent siempre se transmite a la Actividad (-> que funciona como se esperaba).

Pero lo que realmente quiero es tener la posibilidad de abrir el cajón por un golpe desde el borde y tener mi MultiGestureDetector. es posible?

Un poco de una actualización tardía, pero después de tener este problema durante un par de días, la solución que funcionó mejor para mí fue la creación de un CustomDrawerLayout. A continuación, publicar el Contexto del constructor como Actividad, denominado Actividad onTouchEvent de onInterceptTouchEvent.

 @Override public boolean onInterceptTouchEvent( MotionEvent ev ) { getActivity().onTouchEvent( ev ); return super.onInterceptTouchEvent( ev ); } 

Creo que el código para ser un hack cojo … pero funciona para mí. ¡Buena suerte!

Estaba teniendo algunos problemas para reconocer gestos para los elementos dentro del cajón de navegación en sí y encontré requestDisallowInterceptTouchEvent . Lo que encontré fue que estaba recibiendo el MotionEvent.ACTION_DOWN, pero nada después, porque el NavigationDrawer estaba interceptando los toques. La clave sería llamar a requestDisallowInterceptTouchEvent (true) en el evento de abajo en su controlador táctil en la actividad para que pueda manejar el toque sin que sea interceptado.

Esta presentación también fue muy útil al intentar averiguar el sistema táctil en Android.

En caso de que usted o alguien más lo necesite, aquí está mi implementación.
Funciona perfectamente con la excepción de la "ventaja" que no se toma del código de android sino como una constante (que he establecido).

Vea este enlace:
El gaviota de navegación de Android no pasa onTouchEvent a la actividad

  • FindViewById (int) en Activity no se puede aplicar a (int, android.support.v7.widget.Toolbar
  • CoordinatorLayout NullPointerException en onTouchEvent
  • CustomDrawerLayout de cuatro lados pantalla cuestión con Fling gesto y detección
  • Error de lanzamiento de NavigationView: No se encontró ningún identificador de recurso para el atributo 'menu' en el paquete
  • DrawerLayout o TabLayout es nulo después de reanudar la actividad de fondo?
  • Oculte el mango de un cajón deslizante mediante programación
  • Comprobación de la posición actual del fragmento abierto durante el uso de DrawerLayout
  • Cómo configurar un botón de la manija en el contenido deslizante en android?
  • Los gestos no funcionan cuando se utiliza DrawerLayout en la aplicación para Android
  • Cajón de navegación del menú lateral de ActionBarSherlock
  • Cajón que no cubre la barra de acción
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.