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: usando ActivityGroup para integrar actividades
  • Cómo establecer el margen en el cuadro de diálogo
  • No puede desplazar el ViewPager al tocar TextView (con android: gravity = "center") en él
  • Actualización del diálogo de progreso en Activity from AsyncTask
  • Cómo deshacerse de los espacios en gridview
  • Cómo abrir un teclado numérico en android / chrome con <input type = "text">?
  • 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!

  • Biblioteca resolver a una ruta sin archivo project.properties
  • Cómo forzar el uso del menú de desbordamiento en los dispositivos con el botón de menú
  • ¿Se descarta mal el rendimiento del programa en OpenGL?
  • Android, cómo obtener el nombre del paquete?
  • WebView en el cuadro de diálogo
  • Colores hexagonales en Android son algunas veces 8 dígitos. ¿Cómo? ¿Cuál es la diferencia entre #FFFFFF y # FFFFFF00
  • 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.