AdapterViewFlipper中的自定义过渡动画

时间:2014-07-18 22:19:19

标签: android xml objectanimator

我正在使用AdaptorViewFlipper。

其方法setInAnimation()setOutAnimation()期望XML的资源ID为ObjectAnimator

我想要动画缩放&同时淡化视图。

我定义了这个scale_in_animator.xml(为了示例,我只发布 In 动画, Out 一个就是反向)

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="transitionScaleIn"
    android:valueFrom="0"
    android:valueTo="1"
    android:valueType="floatType" />

AdaptorViewFlipper适配器返回的视图包含此功能:

public void setTransitionScaleIn(float value) {
    setScaleX(2-value);
    setScaleY(2-value);
    setAlpha(value);
}

然而,没有任何反应。 setTransitionScaleIn永远不会被召唤。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

来自AdapterViewFlipper的源代码:

  .
  .
  // We wrap the new view in a FrameLayout so as to respect the contract
  // with the adapter, that is, that we don't modify this view directly
  FrameLayout fl = getFrameForChild();
  .
  .

所以AdapterViewFlipper将每个子视图包装在FrameLayout内,所以我只需要扩展AdapterViewFlipper并覆盖此函数:

FrameLayout getFrameForChild() {
    return new FrameLayoutAnimable(getContext());
}

当然使用所有setXXXXX方法创建扩展FrameLayoutAnimable的类FrameLayout

注意 - &GT; getFrameForChild是一种包方法,因此您的扩展AdapterViewFlipper必须位于android.widget包中。