ListView superpone otro diseño al desplazarse
En realidad no sé cómo se llama correctamente – superposición, paralaje o slideUP, lo que sea, tengo una Actividad llamada "cafe details" que presenta un Contenedor (LinearLayout) con información de encabezado (nombre, precio min, tiempo de entrega min etc.) y Otro contenedor (ViewPager) que contiene un ExpandableListView con algo de información (menús y platos) y todo lo que quiero hacer es deslizar mi Viewpager cuando se desplaza listview a la posición Y específica para cubrir (o superponer) la información del encabezado.
- Android: Cuando el teclado aparece, el diseño es invisible. ¿Cómo puedo solucionar esto?
- Superposición sobre un ImageView en Android
- Dibujo sobre otras aplicaciones en Android
- Clips de superposición de objetos de galería
- Detección de la superposición de pantalla: cómo manejar esto en una aplicación de superposición de pantalla
Un efecto similar (pero con paralaje que no necesito usar) se parece a esto
Puedo detectar cuando el usuario que desplaza el listview abajo o para arriba pero cómo puedo mover el contenedor con ViewPager para cubrir el otro contenedor? Por favor, dame ideas, saludos.
UPD He intentado un gran número de maneras de implementarlo y todos ellos desafortunadamente no son adecuados. Así que ahora he venido a la siguiente variante – añadir scroll escucha a ListView, calcular scrollY posición de la vista y luego sobre la base de que mover el viewpager en el eje y llamando a setTranslationY (); Aquí hay algún código
1) fragmento de ViewPager
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int i, int i1, int i2) { if (getActivity() != null) { ((MainActivity) getActivity()).resizePagerContainer(absListView); } } });
2) MainActivity
//object fields int previousPos; private float minTranslation; private float minHeight; <--------somewhere in onCreate minTranslation = - (llVendorDescHeaders.getMeasuredHeight()+llVendorDescNote.getMeasuredHeight()); //llVendorDescHeaders is linearLayout with headers that should be hidden //lVendorDescNote is a textView on green background; minHeight = llVendorDescriptionPagerContainer.getMeasuredHeight(); //llVendorDescriptionPagerContainer is a container which contains ViewPager ---------> public void resizePagerContainer(AbsListView absListView){ final int scrollY = getScrollY(absListView); if (scrollY != previousPos) { final float translationY = Math.max(-scrollY, minTranslation); llVendorDescriptionPagerContainer.setTranslationY(translationY); previousPos = scrollY; } } private int getScrollY(AbsListView view) { View child = view.getChildAt(0); if (child == null) { return 0; } int firstVisiblePosition = view.getFirstVisiblePosition(); int top = child.getTop(); return -top + firstVisiblePosition * child.getHeight() ; }
Esta solución sencilla desafortunadamente tiene un problema – está parpadeando y temblando (no sé cómo llamar a la derecha) cuando se desplaza lentamente. Así que en lugar de setTranslationY () he utilizado un objectAnimator:
public void resizePagerContainer(AbsListView absListView){ ............. ObjectAnimator moveAnim = ObjectAnimator.ofFloat(llVendorDescriptionPagerContainer, "translationY", translationY); moveAnim.start(); .............. }
No me gusta esta solución porque 1) de todos modos se cambia el tamaño de viewpager con demora, no de forma instantánea 2) No creo que sea buena idea crear objetos ObjectAnimator muchos siempre cada vez que desplazo mi listView. Necesita su ayuda y nuevas ideas. Saludos.
- Superposición de teclas de teclado de Android
- Superposición de ScrollView durante la reproducción de vídeo
- ¿Posible superponer un botón encima de otro?
- Imagen sobre otra imagen Android
- Android Map Rendimiento pobre debido a muchas superposiciones?
- Superposición de imagen en dos filas en una vista de lista
- Android: Si los marcadores se superponen entre sí en el mapa, el evento de clic se disparará para el último escondido
- Mapas de Android NullPointerException ItemizedOverlay
¿Has probado CoordinatorLayout de la nueva biblioteca de soporte de diseño de android? Parece que es lo que necesitas. Compruebe este video desde 3:40 o esta entrada del blog .
Estoy suponiendo que usted está desplazando el encabezado superior (el ImageView es un niño del encabezado) basado en el scrollY del ListView / ScrollView, como se muestra abajo:
float translationY = Math.max(-scrollY, mMinHeaderTranslation); mHeader.setTranslationY(translationY); mTopImage.setTranslationY(-translationY / 3); // For parallax effect
Si desea pegar el encabezado / imagen a una determinada dimensión y continuar con el desplazamiento sin moverlo más, entonces puede cambiar el valor de mMinHeaderTranslation para lograr ese efecto.
//change this value to increase the dimension of header stuck on the top int tabHeight = getResources().getDimensionPixelSize(R.dimen.tab_height); mHeaderHeight = getResources().getDimensionPixelSize(R.dimen.header_height); mMinHeaderTranslation = -mHeaderHeight + tabHeight;
Los fragmentos de código anteriores están en referencia a mi demo, pero creo que sigue siendo bastante general para usted.
Si estás interesado puedes consultar mi demo https://github.com/boxme/ParallaxHeaderViewPager
- Buscando un buen calendario datepicker para android
- Colocación / superposición (índice-z) una vista encima de las pestañas de la barra de acciones