15

我有个问题。我想为a的背景颜色设置动画LinearLayout,使用ObjectAnimator.
问题是它有动画,但它既不关心持续时间也不关心valueFromvalueTo

这是我的 xml 文件:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="backgroundColor"
    android:repeatCount="infinite"
    android:repeatMode="reverse"
    android:valueFrom="#FF0000"
    android:valueTo="#000000" />

在Java中我这样称呼:

ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg);
objAnim.setTarget(view);
objAnim.start();

请注意,当我为布局的 alpha 设置动画时,它会按预期工作。
这是一个 Android 错误(华硕 Transformer 上的 4.0.3),还是我错过了什么?

4

2 回答 2

40

我google了一下。有一个答案。尝试使用 TransitionDrawable。http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

此外,stackoverflow.com 上的某个地方也有专门针对同一问题的主题。

添加代码示例:

    Button btn = (Button)this.findViewById(R.id.btn1);
    //Let's change background's color from blue to red.
    ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.RED)};
    TransitionDrawable trans = new TransitionDrawable(color);
    //This will work also on old devices. The latest API says you have to use setBackground instead.
    btn.setBackgroundDrawable(trans);
    trans.startTransition(5000);
于 2012-09-07T18:46:45.687 回答
14

这似乎是一个老问题。我在遇到类似问题时偶然发现了这个问题。

最后,这只是Android中的一个错误。该代码应该可以工作,但是 AnimatorInflater 在设置评估器时会出错。

因此,TypeEvaluator在通货膨胀之后再次设置就可以了。

    ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg);
    objAnim.setTarget(view);
    objAnim.setEvaluator(new ArgbEvaluator());
    objAnim.start();

设置为new ArgbEvaluator()预期的动画作品。

于 2014-09-05T23:02:45.573 回答