我有问题。我希望使用LinearLayout
为ObjectAnimator
的背景颜色设置动画。
问题在于它是动画,但它既不关心持续时间,也不关心valueFrom
和valueTo
。
这是我的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),还是我错过了什么?
答案 0 :(得分:39)
此外,stackoverflow.com上的某个主题专门讨论同样的问题。
ADDED代码示例:
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);
答案 1 :(得分:13)
这似乎是个老问题。我遇到类似问题时偶然发现了这个问题。
最后它只是Android中的一个错误。该代码应该有效,但AnimatorInflater在设置评估器时会出错。
因此,再次通胀后设置TypeEvaluator
就可以了。
ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg);
objAnim.setTarget(view);
objAnim.setEvaluator(new ArgbEvaluator());
objAnim.start();
设置为new ArgbEvaluator()
动画的效果与预期一致。