首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><objectAnimator>和ValueAnimator aka <animator>的区别?

<objectAnimator>和ValueAnimator aka <animator>的区别?
EN

Stack Overflow用户
提问于 2017-04-06 16:35:09
回答 1查看 7K关注 0票数 7

我开始用android学习动画,阅读https://developer.android.com/guide/topics/resources/animation-resource.html

发现xml和ValueAnimator中有两个元素

前者用于动画对象的属性,但与链接页面提供的定义相混淆。即:

“在指定的时间内执行动画。表示ValueAnimator”

这两个标记具有相同的属性:

代码语言:javascript
复制
    <objectAnimator
    android:propertyName="string"
    android:duration="int"
    android:valueFrom="float | int | color"
    android:valueTo="float | int | color"
    android:startOffset="int"
    android:repeatCount="int"
    android:repeatMode=["repeat" | "reverse"]
    android:valueType=["intType" | "floatType"]/>

<animator
    android:duration="int"
    android:valueFrom="float | int | color"
    android:valueTo="float | int | color"
    android:startOffset="int"
    android:repeatCount="int"
    android:repeatMode=["repeat" | "reverse"]
    android:valueType=["intType" | "floatType"]/>

有谁能解释一下不同之处,以及何时使用什么?如有任何答复和评论,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 21:43:41

ObjectAnimator是ValueAnimator的子类。主要的区别是,在ValueAnimator情况下,您必须重写onAnimationUpdate(.)方法指定应用动画值的位置:

代码语言:javascript
复制
ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
   @Override
   public void onAnimationUpdate(ValueAnimator animation) {
       view.setAlpha((Float) animation.getAnimatedValue());
   }
});
animator.start();

ObjectAnimator将自己处理这一问题:

代码语言:javascript
复制
ObjectAnimator.ofFloat(view, View.ALPHA, 0, 1).start();

如果是XML,请注意objectAnimator的“objectAnimator”,它不存在于动画标记中。

另外,从API 23开始,您还可以同时动画几个属性:

代码语言:javascript
复制
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
                android:duration="1000"
                android:repeatCount="1"
                android:repeatMode="reverse">
    <propertyValuesHolder android:propertyName="x" android:valueTo="400"/>
    <propertyValuesHolder android:propertyName="y" android:valueTo="200"/>
</objectAnimator>

和/或自定义动画帧:

代码语言:javascript
复制
<animator xmlns:android="http://schemas.android.com/apk/res/android"
          android:duration="1000"
          android:repeatCount="1"
          android:repeatMode="reverse">
    <propertyValuesHolder>
        <keyframe android:fraction="0" android:value="1"/>
        <keyframe android:fraction=".2" android:value=".4"/>
        <keyframe android:fraction="1" android:value="0"/>
    </propertyValuesHolder>
</animator>
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43260975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档