2010-12-27 17 views
16

Estoy intentando animar las vistas de mi hijo en una vista desplegable. Me gustaría que la vista secundaria se deslice hacia abajo de arriba a abajo cuando expande un grupo y se desliza de abajo hacia arriba al colapsar un grupo. He observado varios métodos (animar el grupo de vistas o las vistas secundarias) pero ninguno parece funcionar muy bien o no lo estoy haciendo bien.animando los elementos secundarios de una vista desplegable de listas al contraer o expandir

He extendido una clase desde BaseExpandableListAdapter para crear mi propio adaptador personalizado. También tengo vistas personalizadas (xml) para los grupos/hijos que inflo en los métodos getChildView y getGroupView.

Solo me gustaría que el grupo colapsado/expandido actual lo anime. ¿Alguien puede señalarme en la dirección correcta? Si necesita más información o código, ¡hágamelo saber!

Saludos, Ivo

+0

¿Ha encontrado una solución para esto? Gracias. – user430926

+0

También estoy buscando la solución. Por favor, ayuda – anshul

+0

¿Tienes alguna solución de trabajo? –

Respuesta

2

Usted puede agregar animación a cada niño, vista en el método bindChildView. Para animar solo el elemento secundario del grupo actual, simplemente capture el evento onExpand, lea sus elementos secundarios, guarde los identificadores en alguna matriz y en bindChildView: anime solo los elementos secundarios guardados en esa matriz.

+3

¿Puedes ser más específico? ¿O tienes algún código de muestra? Gracias. – user430926

+0

Elaboraré: En bindChildView, tengo acceso al objeto View del niño. Puede utilizar la animación de inicio para aplicar la animación al objeto. Puede establecer un desplazamiento para cada uno de ellos, para hacer que la animación sea gradual. – Udinic

5

Lo que he hecho es usar una vista de lista normal y animar las vistas de fila cuando se hace clic.

Yo uso este méthode para la animación: Android animate drop down/up view proper

Puede ser un poco complicado si la altura de la vista que se dejó caer hacia abajo es wrap_content, para este problema que tenía que encontrar y ajustar la altura antes de que comience 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 de que comience la animación y luego hizo visible cuando se inicia la animación.

Editar: Hice un ejemplo completo here.

2

Otra solución es utilizar la biblioteca de Android-SlideExpandableListView escribí: https://github.com/tjerkw/Android-SlideExpandableListView

Se basa en las ideas de Udinic y otros.

más sobre ella se puede leer en esta entrada del blog: http://tjerktech.wordpress.com/2012/06/23/an-emerging-android-ui-pattern-for-contextual-actions/

+0

Sería bueno si pudiera completar su respuesta con una explicación de lo que hay al otro lado de esos enlaces. Las respuestas solo de enlace tienen una tendencia a pudrirse. Gracias. – Kev

+0

¡Fantástico trabajo TjerkW! – Slickelito

Cuestiones relacionadas