Animating propriedade weightSum usando ObjectAnimator
Intro:
Tenho um LinearLayout, que contém dois sub LinearLayouts, assim:
<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, quero que a "Tela 1" leve toda a largura da tela disponível. Portanto, meu R.id.dual_pane tem seu atributo weightSum para 1.0. Isso funciona bem! se weightSum = 1.0, a tela 1 ocupa a tela inteira!
Depois de carregar alguns recursos, altero meu R.id.dual_pane weightSum para 2.0, o que resulta na Tela 1 e na Tela 2 diminuindo 50% da largura da tela. Isso também funciona perfeito. Quando weightSum = 2.0, as duas telas ocupam 50% da largur
Problema
Gostaria de animar a propriedade weightSum, para que meu Screen2 deslize. Estou direcionando o HoneyComb, então a versão minSDK é 11 e imaginei que, usando a nova estrutura ObjectAnimator, poderia animar facilmente essa propriedade, para obter uma aparência suave efeito. Eu verifiquei que o LinearLayout realmente tem os métodos getWeightSum () e setWeightSum () (que é necessário para usar o ObjectAnimator, eu acho).
sforço próprio:
Aqui está o meu código para mostrar e ocultar o Screen2 usando o 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();
}
Aqui, meu mDualPane é minha raiz LinearLayout ...
Questão
Quando eu chamo essas funções, nada acontece. A tela permanece exatamente como era antes. Preciso chamar requestLayout () no meu mDualPane em algum lugar? Estou perdendo algum conhecimento do ObjectAnimator? Ou é impossível animar a propriedade weightSum?
ALÉM DISSO
1) Não quero mexer com larguras codificadas e animar. Por enquanto, eu quero 50-50 para as duas telas, mas posso alterá-lo mais tarde. De qualquer forma, preciso definir uma proporção específica entre as duas largura
2) Examinei o LayoutTransition combinado com a visibilidade alternada, mas sem sucesso