Cambiar el tamaño de los diseños de forma programática (como animación)
Quiero cambiar el tamaño de algunos diseños en mi actividad.
Aquí está el código del XML principal:
- ¿Cómo añadir una imagen gif como un icono de carga de Android?
- Agregar vista al grupo de vistas xml existente en el código
- ¿Cómo mantener visible la barra de herramientas con adjustPan?
- Android: ¿se puede ajustar la altura de SlidingDrawer con wrap_content?
- ¿Cómo puedo editar el código fuente de android os teclado?
<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 medio cubre todo el lugar.
Quiero disminuir programaticamente el tamaño de diseño medio, mientras que aumentar tanto el tamaño de la parte superior e inferior tamaños de diseño, hasta que todos los diseños tienen la misma altura.
Quiero que parezca una animación.
¿Cómo debo hacer eso?
Gracias
- Widget de Android que parece exactamente un icono de lanzador
- Cómo evitar que otra vista sea expulsada de la pantalla
- Modificar el elemento seleccionado en Numberpicker Android
- Obtener el ancho de CardView en Adapter.onBindViewHolder
- Cómo construir un comentario de Facebook como pop-up en android?
- ¿Es una mala práctica tener sólo una actividad en su aplicación de Android que utiliza fragmentos?
- Cambio del tema de la aplicación en tiempo de ejecución mediante el uso de archivos de temas externos
- Android: determina si el código debe residir en la vista de actividad o personalizada
Escribí una ResizeAnimation con 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(); } }
En Honeycomb (Android 3.0) hay las clases Animator
y ObjectAnimator
para animaciones más suaves.
Léalo aquí
Ejemplo de cómo animar el movimiento de un grupo de vistas (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 activará una animación suave con un efecto de rebote y realmente moverá las vistas no como animación antes de Honeycomb. De los documentos:
Las animaciones anteriores cambiaron el aspecto visual de los objetos de destino … pero no cambiaron los objetos.
- ¿Qué es LinearLayoutCompat en appCompat v7?
- Explicar el significado de las banderas Span como SPAN_EXCLUSIVE_EXCLUSIVE