Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


ViewPager intercepta todos los eventos onTouch del eje x. ¿Cómo inhabilitar?

Alcance

Hay un viewpager de dos fragmentos. Uno de esos fragmentos tiene una hechura de disposición que escucha los cambios de onTouch en el eje X.

Problema

El diseño no obtiene casi todos los eventos de Action.Move cuando se toca y se desliza a lo largo del eje X. Parece que viewpager tiene un onInterceptTouchEvent que devuelve true.

  • Android EditText AutoFocus al próximo EditText cuando está en maxlength
  • Android4OpenCV: configuración de la resolución al inicio
  • ¿Cómo cambiar el contenido de EditText con Javascript?
  • Utilice firefox como motor de renderizado para la vista web de Android
  • Cómo especificar el directorio para NDK_MODULE_PATH
  • Utilizar la biblioteca DataBinding para establecer el recurso de color de fondo o null
  • Pregunta

    ¿Es real para anular el comportamiento de viewpager para hacerlo y mi diseño trabajar juntos? Así que la situación perfecta es el diseño intercepta todos los eventos onTouch en él y viewpager gestiona el resto de eventos onTouch. ¡Gracias!

  • Gaveta de navegación (Google+ vs. YouTube)
  • Servicio de Android
  • ¿Por qué ocurrió este error? Java.lang.RuntimeException: ImageLoader debe ser init con la configuración antes de usar
  • Obtener la densidad de pantalla mediante programación en android?
  • ¿Cómo obtener el número de móvil de la tarjeta SIM actual en el dispositivo real?
  • Crear una DialogPreference desde XML
  • 4 Solutions collect form web for “ViewPager intercepta todos los eventos onTouch del eje x. ¿Cómo inhabilitar?”

    Tienes razón, creo que cada contenedor de desplazamiento intercepta eventos táctiles, pero puedes evitarlo. Usted puede poner un oyente de tacto en su disposición:

    public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: pager.requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: pager.requestDisallowInterceptTouchEvent(false); break; } } 

    Situación similar (pero no usar un ViewPager), poner esto en la vista que necesitaba el evento de toque funcionó para mí. Añada cheques para MotionEvents que no sean ACTION_MOVE si corresponde a su caso de uso.

     @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE) { this.getParent().requestDisallowInterceptTouchEvent(true); return true; } else { return super.onTouchEvent(event); } } 

    ¡El neutrino tenía razón!

     getParent().requestDisallowInterceptTouchEvent(true); 

    Una vez que el viewpager acceda al Intercepto touchEvent, la vista secundaria en él puede obtener el evento. Introduzca aquí la descripción de la imagen

    Utilizo un FrameLayout en el viewpager para conseguir el efecto de DrawerLayout (lo necesito no empareja la altura de la pantalla, así que no puedo utilizar el cajón de cajón o el cajón de la navegación).
    Realmente ayuda!

    Tuve un problema similar.

    En mi caso, estaba configurando un OnTouchListener en ViewPager pero no estaba recibiendo eventos táctiles cuando los niños que recibieron el tacto tenían onClick set.

    Lo que hice fue ampliar la clase ViewPager y llamar a mi oyente de clics dentro del método onInterceptTouchEvent(boolean) y funcionó bien. Sólo tenga cuidado de no interceptar los eventos equivocados.

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