Анимация свойства 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 в сочетании с переключением видимости, но безрезультатно