Android objectAnimator animate backgroundColor of Layout

Posted

技术标签:

【中文标题】Android objectAnimator animate backgroundColor of Layout【英文标题】: 【发布时间】:2012-06-21 07:10:42 【问题描述】:

我有问题。我想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 错误(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);颜色是:#6400B7C5#00000000【参考方案2】:

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

最后这只是 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ëlle animator_bkg 是作者使用的动画师。因此,您需要创建自己的 XML 资源并改为使用它。

以上是关于Android objectAnimator animate backgroundColor of Layout的主要内容,如果未能解决你的问题,请参考以下文章

ObjectAnimator 重复循环延迟

Android中属性动画2----ObjectAnimator监听的使用

java #android #objectAnimator

Android objectAnimator animate backgroundColor of Layout

Android - 在同一个 XML 文件上制作翻译和 objectAnimator

一起Talk Android吧(第四百八十九回:如何使用代码实现ObjectAnimator)