Incorporación de ListView dentro de la Galería

El objetivo es implementar una Galería cuyo adaptador devuelve ListViews (en otras palabras, desplazamiento vertical de ListViews incrustado en una galería de desplazamiento horizontal). Es una especie de obras después de un poco de trabajo, pero al intentar desplazarse horizontalmente, el ListView se ve muy nervioso, como hay cierta adherencia a que se centra. No he observado este tipo de comportamiento con ningún otro tipo de Vista incrustado en una Galería.

Esto es lo que he intentado:

Inicialmente, encontré que el ListView aplastó eventos táctiles, por lo que el oyente gesto en la Galería nunca se despide.

Así que en el método onCreate () de la actividad, he creado un GestureDetector:

galleryGestureDetector = new GestureDetector(this, gallery);

Entonces, dentro del método getView () del adaptador de Galería, después de que el ListView se haya inflado y configurado, tengo un código como este:

 listView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { galleryGestureDetector.onTouchEvent(event); return true; } }); 

En este caso, incluso he ido al paso extremo de devolver true desde OnTouchListener para asegurarme de que el método onTouchEvent () de la listView nunca se llame realmente. Ocurre el mismo comportamiento nervioso. Como resultado, creo que puedo descartar las implementaciones onTouchEvent () entre las dos vistas.

Intenté abusar del concepto de TouchDelegate, extendiendo el rectángulo táctil de la Galería para incluir el ListView y forzar el ListView a delegarle, pero esto también fue un esfuerzo inútil.

Me gustaría levantar las manos y decir que no es posible en la actualidad, pero la aplicación de redes sociales que los paquetes con el DroidX de alguna manera lo logra!

El problema es que ListView está interceptando eventos táctiles de la Galería y luego alterando la posición de vista en sí. Esto es lo que conduce al efecto jittering hacia adelante y hacia atrás que veo cuando uso los widgets tal cual. Considero esto un error en el widget Galería, pero mientras tanto se puede arreglar mediante la subclase de la Galería de esta manera:

 public class BetterGallery extends Gallery { private boolean scrollingHorizontally = false; public BetterGallery(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public BetterGallery(Context context, AttributeSet attrs) { super(context, attrs); } public BetterGallery(Context context) { super(context); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { super.onInterceptTouchEvent(ev); return scrollingHorizontally; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { scrollingHorizontally = true; return super.onScroll(e1, e2, distanceX, distanceY); } @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: scrollingHorizontally = false; } return super.onTouchEvent(event); } 

}

Si utiliza BetterGallery en lugar de Gallery, todo funciona bien!

  • Android deja de enviar eventos onTouch
  • cómo deslizar un evento button onTouch en android
  • Combinación de combinación de Android :: OnTouchListener && OnClickListener
  • Cambiar la altura del diseño relativo con la misma velocidad que el dedo del usuario Se mueve en el diseño
  • ¿Cómo puedo mantener los eventos de ontouch manejados por un widget incluso si las coordenadas de tacto ya no están dentro del widget, en android
  • Cómo agregar la funcionalidad de deslizar en Android CardView?
  • SwipeListView sólo un elemento abierto a la vez
  • OnTouchListener de una vista vs onTouchEvent
  • Manejo del evento de toque Intercept sin extender ViewGroup
  • android arrastrar y soltar ImageView onTouchListener
  • Disparar Evento táctil desde la vista DialogFragment a la vista de actividad principal
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.