Android objectAnimator animate backgroundColor of Layout
Posted
技术标签:
【中文标题】Android objectAnimator animate backgroundColor of Layout【英文标题】: 【发布时间】:2012-06-21 07:10:42 【问题描述】:我有问题。我想为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 错误(Asus Transformer 上的 4.0.3),还是我错过了什么?
【问题讨论】:
当您尝试为颜色设置动画时究竟会发生什么? 动画速度非常快,看起来背景是用所有可能的颜色(如随机颜色)进行动画处理的。我看到蓝色,红色,绿色,黄色,一切,而且非常快:) 这不起作用,因为在“数字”0xFF0000 和 0x000000 之间还有其他原色 0x00FF00 和 0x0000FF,以及几乎所有其他颜色。将您的桌面计算器设置为程序员/十六进制,您会看到红色的一半实际上是深黄色而不是深红色。 【参考方案1】:我用谷歌搜索了一下。有一个答案。尝试使用 TransitionDrawable。 http://developer.android.com/guide/topics/resources/drawable-resource.html#Transition
此外,***.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);
【讨论】:
谢谢!!!!只是想在 textview 上弹出新的 bg 颜色并在更改时淡入黑色。尝试了所有其他动画。甚至是 TransitionDrawable 的声明式版本。这个工作))) 伙计们,我有一个问题,我做了同样的事情,但它似乎不起作用,在我的代码下面: ColorDrawable[] color = new ColorDrawable(ContextCompat.getColor(applicationContext, R.color.selectedcolor )), new ColorDrawable(ContextCompat.getColor(applicationContext, R.color.unselectedcolor)); TransitionDrawable trans = new TransitionDrawable(color); holder.relativeLayout.setBackground(trans); trans.startTransition(5000);颜色是:这似乎是一个老问题。我在遇到类似问题时偶然发现了这个问题。
最后这只是 Android 中的一个错误。该代码应该可以工作,但是 AnimatorInflater 在设置评估器时会出错。
所以在充气之后再次设置TypeEvaluator
就可以了。
ObjectAnimator objAnim = (ObjectAnimator)AnimatorInflater.loadAnimator(getActivity(), R.animator.animator_bkg);
objAnim.setTarget(view);
objAnim.setEvaluator(new ArgbEvaluator());
objAnim.start();
设置为new ArgbEvaluator()
动画会按预期工作。
【讨论】:
这个答案应该被标记为实际答案,因为它解决了原始问题,而 user1415536 的答案对旧对象使用了另一种方法。 我找不到路径 R.animator.animator_bkg。我必须自己制作这条路径还是应该下载一些东西? @Daniëlleanimator_bkg
是作者使用的动画师。因此,您需要创建自己的 XML 资源并改为使用它。以上是关于Android objectAnimator animate backgroundColor of Layout的主要内容,如果未能解决你的问题,请参考以下文章
Android中属性动画2----ObjectAnimator监听的使用
Android objectAnimator animate backgroundColor of Layout