Animando la propiedad weightSum usando ObjectAnimator

Introducción:

Tengo un LinearLayout, que contiene dos Sub LinearLayouts, 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 que "Pantalla 1" tome todo el ancho de 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 weightSum a 2.0, lo que da como resultado que tanto la Pantalla 1 como la Pantalla 2 tengan un 50% de descuento en el ancho de la pantalla. Esto también funciona perfecto. Cuando weightSum = 2.0, ambas pantallas ocupan el 50% del ancho.

Problema

Me gustaría animar la propiedad weightSum, por lo que mi Screen2 se deslizará hacia adentro. Estoy apuntando a HoneyComb, por lo que la versión minSDK es 11, y pensé que, usando el nuevo marco ObjectAnimator, podría animar fácilmente esta propiedad, para obtener una buena suavidad efecto. Verifiqué que LinearLayout realmente tiene métodos getWeightSum () y setWeightSum () (que se requiere para usar ObjectAnimator, creo).

Esfuerzo propio:

Aquí está mi código para mostrar y ocultar Screen2 usando 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, no pasa nada. La pantalla permanece exactamente como era 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?

ADEMÁS

1) No quiero meterme con anchos codificados y animarlos. 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 alternar visibilidad, pero fue en vano

Respuestas a la pregunta(2)

Su respuesta a la pregunta