android - transicion - Redimensionamiento de diseños mediante programación(como animación)
transicion de actividades android studio (2)
Quiero cambiar el tamaño de algunos diseños en mi Actividad.
Aquí está el código del XML principal:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/top"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="#3ee3e3" >
</LinearLayout>
<LinearLayout
android:id="@+id/middle"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
</LinearLayout>
<LinearLayout
android:id="@+id/bottom"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="#fe51e6" >
</LinearLayout>
</LinearLayout>
Como puede ver, la altura de los diseños superior e inferior es 0, y el diseño del medio cubre todo el lugar.
Deseo disminuir el tamaño del diseño del medio en forma programática, al mismo tiempo que aumente los tamaños de diseño superior e inferior, hasta que todos los diseños tengan la misma altura.
Quiero que se vea como una animación.
¿Cómo debo hacer eso?
Gracias
En Honeycomb (Android 3.0) existen las clases Animator
y ObjectAnimator
para animaciones más ObjectAnimator
.
Léelo here
Ejemplo sobre cómo animar el movimiento de un grupo de vista (LinearLayout) con un interpolador de rebote.
BounceInterpolator bounceInterpolator = new BounceInterpolator();
ObjectAnimator anim = ObjectAnimator.ofFloat(myViewGroup, "translationY", 0f, -200 );
anim.setInterpolator(bounceInterpolator);
anim.setDuration(1100).start();
Esto desencadenará una animación suave con un efecto de rebote y realmente moverá las vistas no como la animación antes de Honeycomb. De los documentos:
Las animaciones anteriores cambiaron la apariencia visual de los objetos objetivo ... pero en realidad no cambiaron los objetos mismos.
Escribí ResizeAnimation para un propósito similar. Es simple pero costoso.
/**
* an animation for resizing the view.
*/
public class ResizeAnimation extends Animation {
private View mView;
private float mToHeight;
private float mFromHeight;
private float mToWidth;
private float mFromWidth;
public ResizeAnimation(View v, float fromWidth, float fromHeight, float toWidth, float toHeight) {
mToHeight = toHeight;
mToWidth = toWidth;
mFromHeight = fromHeight;
mFromWidth = fromWidth;
mView = v;
setDuration(300);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
float height =
(mToHeight - mFromHeight) * interpolatedTime + mFromHeight;
float width = (mToWidth - mFromWidth) * interpolatedTime + mFromWidth;
LayoutParams p = mView.getLayoutParams();
p.height = (int) height;
p.width = (int) width;
mView.requestLayout();
}
}