Intro:Animación de propiedad weightSum usando ObjectAnimator
Tengo un LinearLayout, que contiene dos LinearLayouts sub, así:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dual_pane"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:weightSum="1.0">
<!-- Screen 1 -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#ff0000"
android:layout_weight="1">
</LinearLayout>
<!-- Screen 2 -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#ff6600"
android:layout_weight="1">
</LinearLayout>
</LinearLayout>
Inicialmente, quiero "Screen 1" a tomar todas ancho de la pantalla disponible. Por lo tanto, mi R.id.dual_pane tiene su atributo weightSum a 1.0. Esto funciona bien! si weightSum = 1.0, ¡la pantalla 1 ocupa toda la pantalla!
Después de cargar algunos recursos, cambio mi R.id.dual_pane weighSum a 2.0, lo que da como resultado que tanto la Pantalla 1 como la Pantalla 2 obtengan un 50% de descuento en el ancho de la pantalla. Esto también funciona perfecto. Cuando weightSum = 2.0, ambas pantallas toman el 50% del ancho.
Problema:.
me gustaría animar la propiedad weightSum, por lo que mi Screen2 se deslizará en me estoy apuntando HoneyComb, por lo que la versión minSDK es de 11, y pensé, utilizando el nuevo marco ObjectAnimator, Podría animar fácilmente esta propiedad, para obtener un buen efecto suave. Verifiqué que LinearLayout tiene métodos getWeightSum() y setWeightSum() (que se requiere para usar ObjectAnimator, creo).
propio esfuerzo:
Aquí está mi código para mostrar y ocultar Screen2 utilizando el ObjectAnimator:
private void showScreen2()
{
//Not-animated will work...
//mDualPane.setWeightSum(2.0f);
// Now try to animate the weightSum
float ws = mDualPane.getWeightSum();
ObjectAnimator anim = ObjectAnimator.ofFloat(mDualPane, "weightSum", ws, 2.0f);
anim.setDuration(5000);
anim.start();
}
private void hideScreen2()
{
//Not-animated will work...
//mDualPane.setWeightSum(1.0f);
// Now try to animate the weightSum
float ws = mDualPane.getWeightSum();
ObjectAnimator anim = ObjectAnimator.ofFloat(mDualPane, "weightSum", ws, 1.0f);
anim.setDuration(5000);
anim.start();
}
Aquí, mi mDualPane es mi raíz LinearLayout ...
Pregunta:
Cuando llamo a estas funciones, nada h aparece. La pantalla permanece exactamente como estaba antes. ¿Debo llamar a requestLayout() en mi mDualPane en alguna parte? ¿Me falta algún conocimiento del ObjectAnimator? ¿O es imposible animar la propiedad weightSum?
también:
1) que no quieren meterse con anchuras no modificables, y animar a aquellos. Por ahora quiero 50-50 para ambas pantallas, pero podría cambiarlo más tarde. De todos modos, necesito poder establecer una relación específica entre los dos anchos.
2) He mirado LayoutTransition combinado con cambiar la visibilidad, pero fue en vano
hola, Entreco si dos diseños lineales tienen pesos desiguales entonces, ¿podemos hacer esto posible para mover el diseño del lado derecho al lado izquierdo y llenar toda la pantalla? por favor, ayuda – user1108995
Desafortunadamente, esto solo funciona para vistas deslizantes de izquierda a derecha, debido a la naturaleza de LinearLayout. Para hacer esto al revés, sugiero que veas http://stackoverflow.com/questions/4932462/animate-the-transition-between-fragments – Entreco
mis dos vistas también están en LinearLayout pero con pesos desiguales – user1108995