android - programacion - Animación para expandibleListView
manual android studio avanzado (3)
He encontrado una solución posible (parcial) para este problema.
primero necesita almacenar el estado de desplazamiento de ExpnadableListView:
@Override
public void onScrollStateChanged(final AbsListView view, final int scrollState) {
this.mScrollState = scrollState;
}
public int getScrollState() {
return this.mScrollState;
}
para listView en sí mismo, debe almacenar en qué grupo se hizo clic, de modo que solo sus hijos se animarán:
mListView.setOnGroupClickListener(...
@Override
public boolean onGroupClick(...){
mGroupPosition=groupPosition;
ahora, en el método getChildView (), verifica el estado del desplazamiento y, si está inactivo, comienza la animación, por ejemplo:
public View getChildView(...) {
// <=prepare rootView and return it later
if (groupPosition==mGroupPosition&&getScrollState() == OnScrollListener.SCROLL_STATE_IDLE)
rootView.setAnimation(...)
esto establecerá una animación para las vistas secundarias cada vez que expanda el grupo.
el inconveniente de esto es:
- solo para las vistas de niños expandidas. Tendrá que pensar en una lógica extra para animarlos al colapsar el grupo.
- todas las animaciones comienzan de una vez. necesitarás agregar múltiples animaciones una tras otra si deseas que funcione de otra manera.
¿Es posible aplicar una animación de expansión o contracción para expandibleListView?
He hecho un trabajo similar para una simple vista de lista. Para hacer eso, eliminé el método getView y aplicaba la animación de traducción hacia arriba (o hacia abajo) en cada elemento de la lista. El grado de traducción se decidió por la posición del elemento de la lista.
Se puede hacer utilizando un simple ListView que contiene una vista inicialmente oculta y una clase personalizada que amplía la animación. La idea básica es comenzar con View.GONE
y volver a dimensionar gradualmente el margen desde un valor negativo al tamaño requerido mientras se establece la visibilidad en View.VISIBLE
.
Ver:
- https://github.com/tjerkw/Android-SlideExpandableListView
- Android Animation: Ocultar / Mostrar menú
- Cómo animar View.setVisibility (GONE)
..y finalmente
El último ejemplo contiene todo el código que necesitas. Me parece un poco hackish, especialmente el hecho de que inicialmente debes establecer view.bottomMargin = -50
o más, de lo contrario la animación no funciona correctamente la primera vez, pero hasta ahora no he encontrado ninguna alternativa viable (aparte de usar un ScrollView con sus propios elementos de contenedor en lugar de un ListView).
Y, por último, esta aplicación incluye el ejemplo anterior, entre muchos otros ejemplos útiles con enlaces a fuentes:
Actualización: Google eliminó la aplicación de play store presuntamente por violación de la propiedad intelectual (aunque solo contenía demostraciones y enlaces a proyectos de código abierto), el autor ahora puso la aplicación disponible para su descarga directa desde http://goo.gl/ihcgs Para obtener más información detalles ver https://plus.google.com/108176685096570584154/posts . NB: No estoy afiliado con el autor.