Анимация свойства weightSum с использованием ObjectAnimator

Вступление:

У меня есть LinearLayout, который содержит две суб LinearLayout, например, так:

<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>

Сначала я хочу, чтобы «Экран 1» занимал всю доступную ширину экрана. Поэтому мой R.id.dual_pane имеет свой атрибут weightSum равным 1.0. Это отлично работает! если weightSum = 1.0, экран 1 занимает весь экран!

После загрузки некоторых ресурсов я изменяю свой R.Sid.dual_pane weightSum на 2.0, в результате чего как Screen 1, так и Screen 2 отбирают 50% ширины экрана. Это также работает отлично. Когда weightSum = 2.0, оба экрана занимают 50% ширины.

Проблема:

Я хотел бы анимировать свойство weightSum, чтобы мой Screen2 вставлялся. Я нацеливаюсь на HoneyComb, поэтому версия minSDK равна 11, и я решил, что с помощью новой среды ObjectAnimator я мог бы легко анимировать это свойство, чтобы получить хороший плавный эффект , Я проверил, что LinearLayout действительно имеет методы getWeightSum () и setWeightSum () (я думаю, что это необходимо для использования ObjectAnimator).

Собственные усилия:

Вот мой код для отображения и скрытия Screen2 с помощью 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();
}

Здесь мой mDualPane - мой корневой LinearLayout ...

Вопрос:

Когда я вызываю эти функции, ничего не происходит. Экран остается таким же, как и раньше. Нужно ли где-нибудь вызывать requestLayout () на моем mDualPane? Я скучаю по некоторым знаниям ObjectAnimator? Или невозможно анимировать свойство weightSum?

ТАКЖЕ:

1) Я не хочу связываться с жестко заданными значениями ширины и анимировать их. Сейчас я хочу 50-50 для обоих экранов, но я мог бы изменить это позже. В любом случае, мне нужно иметь возможность установить конкретное соотношение между двумя значениями ширины.

2) Я смотрел на LayoutTransition в сочетании с переключением видимости, но безрезультатно

Ответы на вопрос(1)

Ваш ответ на вопрос