Transferir evento de desplazamiento de vista deslizante a ScrollView – Panel deslizante con ScrollView como Google Maps

Así que estoy usando la Biblioteca de Panel deslizante en mi aplicación, y estoy tratando de implementar un ScrollView dentro del panel deslizante. Dado que tanto el panel deslizante como el ScrollView son controlados por desplazamientos verticales, esto me está causando algunos problemas.

He conseguido que funcione parcialmente conmutando el dragview del panel una vez que el panel ha sido deslizado todo el camino hacia arriba, y cuando el ScrollView se ha desplazado a la parte superior.

Introduzca aquí la descripción de la imagen

El problema que enfrento ahora es que, al desplazar el panel hacia arriba, el desplazamiento no se transfiere al ScrollView, como lo hace en Google Maps. Poco difícil de explicar, así que mira el video aquí: www.youtube.com/watch?v=9MUsmQzusX8&feature=youtu.be

Este es el listener de diapositivas del panel:

 ... slidePanel.setEnableDragViewTouchEvents(true); slidePanel.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { // Change the dragview to panelheader when panel is fully expanded // I'm doing this here instead of in onPanelExpanded, // because onPanelExpanded first gets called once scroll // is released. if (slideOffset <= 0) { slidePanel.setDragView(layoutPanelTop); } // If the panel is not fully expanded set the whole // panel as dragview else if(slideOffset > 0) { slidePanel.setDragView(layoutPanel); } } } @Override public void onPanelExpanded(View panel) { // layout.setDragView(layoutPanelTop); panelCollapsed = false; panelExpanded = true; panelAnchored = false; Log.v("TAG, "panelExpanded"); } @Override public void onPanelCollapsed(View panel) { slidePanel.setDragView(layoutPanel); panelCollapsed = true; panelExpanded = false; panelAnchored = false; Log.v(TAG, "panelCollapsed"); } @Override public void onPanelAnchored(View panel) { slidePanel.setDragView(layoutPanel); panelCollapsed = false; panelExpanded = false; panelAnchored = true; Log.v(TAG, "panelAnchored"); } }); 

Y he conseguido crear un oyente scrollview totalmente funcional extendiendo scrollview, que puede detectar la dirección de desplazamiento y eventos de movimiento onDown y onUp:

 private boolean atScrollViewTop = false; @Override public void onScrollChanged(int scrollY) { scrollY = Math.min(mMaxScrollY, scrollY); if (scrollY <= 0) { Log.v("myTag", "You at scrollview top"); atScrollViewTop = true; } else { atScrollViewTop = false; } mScrollSettleHandler.onScroll(scrollY); switch (mState) { case STATE_SCROLL_UP: if (panelExpanded && atScrollViewTop) { slidePanel.setDragView(layoutPanel); } else { slidePanel.setDragView(layoutPanelTop); } Log.v("myTag", "scrolling up"); break; case STATE_SCROLL_DOWN: slidePanel.setDragView(layoutPanelTop); Log.v("myTag", "scrolling down"); break; } } @Override public void onDownMotionEvent() { } @Override public void onUpOrCancelMotionEvent() { } 

He estado luchando con esto los últimos dos días .. Así que realmente espero que en algún puntero por lo menos. Muchas gracias de antemano. Recuerdos Jakob Harteg.

Echa un vistazo a esta respuesta (implica algunos cambios en el SlidingUpPanelLayout): https://stackoverflow.com/a/22720204/466937

Lo siento por retraso .. i encontrar la solución.

 image = (ImageView) findViewById(R.id.image); //Layout to slide SlidingUpPanelLayout layout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout); layout.setDragView(image); /*This method sets the layout to be used only in the sliding panel, while all layouts children are able to perform other functions such as scrolling */ 

Y este es el diseño

 <..SlidingUpPanelLayout android:id="@+id/sliding_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" /> <LinearLayout android:id="@+id/slide_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="35dp" android:background="@drawable/ec_image"/> <!-- FINALLY SCROLLVIEW --> <ScrollView .... /> 

Espero que sea útil.

Supongo que ScrollView es el hijo de SlidingPanel ?
En ese caso, onInterceptTouchEvent a su SlidingPanel para interceptar el evento onTouch de su ScrollView cuando y = 0 .

onInterceptTouchEvent hace las dos siguientes:

  • Niño obtiene acción cancelar evento
  • El padre consigue el acontecimiento a través de onTouch

No sé si llegué tarde pero después de trabajar duro algunos días he encontrado que el panel de AndroidSlidingUp tiene un método llamado setScrollView que maneja eventos de desplazamiento correctamente.

Espero que este post sea útil porque estaba pasando mucho tiempo buscando y no encontré algún consejo que me ayude.

  • Diferencia entre la clase DataInputStream / DataOutputStream y la clase InputStream / OutputStream
  • Obtener el nombre del idioma en ese idioma desde el código de idioma
  • OutOfMemoryException en el emulador
  • Android: Cajón de navegación en múltiples actividades
  • ¿Hay una manera de marcar TODO completo en el estudio de Android?
  • Escritura de audio en el servidor a través de un socket TCP
  • Acceso a archivos de recursos en Android
  • Java (Android) WebSocket Client Libraries
  • Java Threading Error IllegalThreadState hilo ya iniciado
  • ¿Es IntentService una implementación del patrón de comandos?
  • ¿Cómo determinas si una .sqlite o .sqback está dañada en Java?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.