Aquí está el ejemplo de Udinic. Había elemento listview ampliar con la animación y requieren nivel de API única 4+ Básicamente se necesita una clase de animación
/**
* This animation class is animating the expanding and reducing the size of a view.
* The animation toggles between the Expand and Reduce, depending on the current state of the view
* @author Udinic
*
*/
public class ExpandAnimation extends Animation {
private View mAnimatedView;
private LayoutParams mViewLayoutParams;
private int mMarginStart, mMarginEnd;
private boolean mIsVisibleAfter = false;
private boolean mWasEndedAlready = false;
/**
* Initialize the animation
* @param view The layout we want to animate
* @param duration The duration of the animation, in ms
*/
public ExpandAnimation(View view, int duration) {
setDuration(duration);
mAnimatedView = view;
mViewLayoutParams = (LayoutParams) view.getLayoutParams();
// decide to show or hide the view
mIsVisibleAfter = (view.getVisibility() == View.VISIBLE);
mMarginStart = mViewLayoutParams.bottomMargin;
mMarginEnd = (mMarginStart == 0 ? (0- view.getHeight()) : 0);
view.setVisibility(View.VISIBLE);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
if (interpolatedTime < 1.0f) {
// Calculating the new bottom margin, and setting it
mViewLayoutParams.bottomMargin = mMarginStart
+ (int) ((mMarginEnd - mMarginStart) * interpolatedTime);
// Invalidating the layout, making us seeing the changes we made
mAnimatedView.requestLayout();
// Making sure we didn't run the ending before (it happens!)
} else if (!mWasEndedAlready) {
mViewLayoutParams.bottomMargin = mMarginEnd;
mAnimatedView.requestLayout();
if (mIsVisibleAfter) {
mAnimatedView.setVisibility(View.GONE);
}
mWasEndedAlready = true;
}
}
}
Y utilizar este:
View toolbar = view.findViewById(R.id.toolbar);
// Creating the expand animation for the item
ExpandAnimation expandAni = new ExpandAnimation(toolbar, 500);
// Start the animation on the toolbar
toolbar.startAnimation(expandAni);
ExpandAnimationExample
Para ser votante, debe dejar la razón por la que rechaza mi respuesta. Sé que mi respuesta se puede considerar solo como respuesta de enlace, pero ¿qué es lo que quieres? Esperas que copie todo el archivo en ese repositorio aquí. Por lo tanto, el enlace de Github es confiable. –
Nota, este ejemplo todavía tiene fallas. https://github.com/Udinic/SmallExamples/issues/6 A medida que desplaza la vista de lista hacia arriba y hacia abajo, el estado expandir/colapsar se estropeará. –
@CheokYanCheng ¿Alguna solución para los estados desordenados? Aparentemente, hay un problema cuando nos desplazamos hacia arriba para que la vista se deslice hacia abajo ahora para tener esto. Cambiamos la visibilidad para que el anim. se activa pero hay un parpadeo, la vista se cierra y luego se abre de nuevo para deslizarse hacia abajo :( – beerBear