Digamos que tengo un diseño lineal vertical con:
[v1]
[v2]
Por defecto v1 tiene visibily = GONE. Me gustaría mostrar v1 con una animación expandida y presionar hacia abajo v2 al mismo tiempo.
Intenté algo como esto:
Animation a = new Animation()
{
int initialHeight;
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
final int newHeight = (int)(initialHeight * interpolatedTime);
v.getLayoutParams().height = newHeight;
v.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
initialHeight = height;
}
@Override
public boolean willChangeBounds() {
return true;
}
};
Pero con esta solución, parpadeo cuando comienza la animación. Creo que se debe a que v1 muestra el tamaño completo antes de que se aplique la animación.
Con javascript, esta es una línea de jQuery! ¿Alguna forma simple de hacer esto con Android?
a.setDuration(((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density)) * 4)
v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
y ¡v.getLayoutParams().height = interpolatedTime == 1 ? targetHeight : (int)(targetHeight * interpolatedTime);
Eso funcionó para mí!