Animar a los niños de una lista expandible cuando se colapsan / expanden
Estoy intentando animar las vistas de mi hijo en una lista expandible. Me gustaría que la vista del niño se deslice hacia abajo de arriba a abajo al expandir un grupo y deslizarse de abajo hacia arriba al colapsar un grupo. He mirado varios métodos (animando el viewgroup o las vistas del niño) pero ninguno parece trabajar muy bien o no lo estoy haciendo derecho.
He extendido una clase de BaseExpandableListAdapter para crear mi propio adaptador personalizado. También tengo vistas de encargo (xml) para los grupos / childs que hincho en los métodos getChildView y getGroupView.
- Swipeleft para eliminar no funciona en la altura expandible listview
- Android: ¿Obtener el número de grupos en ExpandableListView?
- ExpandableListView muestra el indicador para grupos sin hijos
- Clear ExpandableListView
- ExpandableListView y el NavigationDrawer
Sólo me gustaría que el actual grupo colapsado / expandido para animar a su hijo. ¿Puede alguien señalarme en la dirección correcta? ¡Si usted necesita más información o código déjeme por favor saber!
Saludos, Ivo
- Android: 2 o más ExpandableListView dentro del Gaveta de navegación
- Android ExpandableListActivity y SimpleCursorTreeAdapter?
- Android - ListView expandible - con ViewHolder para la optimización
- Nueva lista expandible altamente personalizable
- Depurando ExpandableListView de la base de datos - no funciona
- Enlace de datos de Android en una lista expandible
- ¿Cómo mostrar más de 3 niveles de Vista de lista expandible?
- Repetición de niños en la lista expandible
Así que lo que he hecho es usar un listview regular y luego animar las vistas de fila cuando se hace clic.
Yo uso este methode para la animación: Android animar gota abajo / vista arriba adecuada
Puede ser un poco complicado si la altura para la vista que se deja caer es wrap_content, para este problema tuve que encontrar y establecer la altura antes de iniciar la animación:
public static void setHeightForWrapContent(Activity activity, View view) { DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); int screenWidth = metrics.widthPixels; int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); int widthMeasureSpec = MeasureSpec.makeMeasureSpec(screenWidth, MeasureSpec.EXACTLY); view.measure(widthMeasureSpec, heightMeasureSpec); int height = view.getMeasuredHeight(); view.getLayoutParams().height = height; }
La vista debe desaparecer antes del inicio de la animación y luego se hace visible cuando se inicia la animación.
Edit: He hecho un ejemplo completo aquí .
Puede agregar animación a cada vista secundaria en el método bindChildView. Con el fin de animar sólo el niño del grupo actual – sólo tienes que coger el evento onExpand, leer sus childs, guardar los ids en algún array, y en el bindChildView – animar sólo los childs guardados en ese array.
Otra solución es usar la biblioteca Android-SlideExpandableListView que escribí: https://github.com/tjerkw/Android-SlideExpandableListView
Se basa en las ideas de Udinic y otros.
Más sobre esto se puede leer en esta entrada del blog: http://tjerktech.wordpress.com/2012/06/23/an-emerging-android-ui-pattern-for-contextual-actions/
- Actualización de Android Studio: algunos conflictos encontrados en el área de instalación
- Tabla de soporte de diseño de Android Contenido solapado de superposición