Android属性动画

Android  小知识  2023年7月4日 am8:08发布1年前 (2023)更新 91es.com站长
90 0 0

前言

本文主要介绍Android属性动画。这个是之前看《Android进阶之光》记录的,摘抄于此,方便自己查阅。

正文

早期Android提供的动画只有帧动画和 View 动画 ,后面Android 3.0后就出现了属性动画。

在介绍属性动画前,也重新认识一下View动画的优缺点吧,反正谁好用简单就用谁。

下面是View动画的优缺点:

  1. 优点:效率高,使用方便

  2. 缺点:无法进行View交互

而属性动画就完美的解决了View动画的缺点,同时还丰富了动画效果,也更加强大。

下面就进入属性动画的介绍。

ObjectAnimator

    创建一个 ObjectAnimator 只需通过其静态工厂类直接返还一个ObjectAnimator对象。 参数包括一个对象和对象的属性名字, 但这个属性必须有get和set方法, 其内部会通过Java反射机制来调用set方法修改对象的属性值。  
//ofFloat(目标Object,操作属性:x轴移动,操作参数:移动200像素)
ObjectAnimator mObjectAnimator = ObjectAnimator.ofFloat(view, "translationX", 200);
mObjectAnimator.setDuration(300);
mObjectAnimator.start();

除了translationX,还可以以下其他参数:

  1. translationX和translationY: 用来沿着X轴或者Y轴进行平移

  2. rotation、 rotationX、 rotationY: 用来围绕View的支点进行旋转

  3. PrivotX和PrivotY: 控制View对象的支点位置, 围绕这个支点进行旋转和缩放变换处理。 默认该支点 位置就是View对象的中心点。

  4. alpha: 透明度, 默认是1(不透明) , 0代表完全透明

  5. x和y: 描述View对象在其容器中的最终位置

PS: 在使用ObjectAnimator的时候, 要操作的属性必须要有get和set方法, 不然ObjectAnimator 就无法生效。

如果一个属性没有get、 set方法, 也可以通过自定义一个属性类或包装类来间接地给这个属性增加get和set方法。

Android属性动画

ValueAnimator

ValueAnimator不提供任何动画效果, 它更像一个数值发生器, 用来产生有一定规律的数字, 从而让调 用者控制动画的实现过程。

通常情况下, 在ValueAnimator的AnimatorUpdateListener中监听数值的变化, 从而完成动画的变换,

ValueAnimator mValueAnimator =new ValueAnimator.ofFloat(0, 100);
mValueAnimator.setTarget(view);
mValueAnimator.setDuration(1000).start();
mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator){
            Float float = (Float) valueAnimator.getAnimatedValue();
        }
});

动画的监听

完整的动画具有start、 Repeat、 End、 Cancel这4个过程 。但是,我们一般只关心动画的结束。

ObjectAnimator mObjectAnimator =  ObjectAnimator.ofFloat(view, "alpha", 1.5f);
mObjectAnimator.addListener(new ObjectAnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animator){
            super.onAnimationEnd(animator);

    }
})

AnimatorSet

顾名思义,应该是一个集合。没错,AnimatorSet可以组合动画一起舞动。AnimatorSet内部采用了建造者模式,也就是可以通过AnimatorSet.Builder组合参数。AnimatorSet.Builder 中包含如下方法:

  1. after(Animator animator ) : 将现有动画插入到传入的动画[animator ]之后执行

  2. after(long delay) : 将现有动画延迟指定毫秒后执行

  3. before(Animator animator ) : 将现有动画插入到传入的动画[animator ]之前执行

  4. with(Animator animator ) : 将现有动画和传入的动画[animator ]同时执行

注意顺序,要不很容易搞晕。

比如after(Animator animator ) 是将现有动画(已经加载的,可以看做after之前添加的动画)添加到animator之后执行。

举个例子

//x轴方向从0移动到200,最后又回到0
ObjectAnimator mObjectAnimator1 = new ObjectAnimator.ofFloat(view,"translationX", 0.0f, 200.0f, 0.0f);
//x轴方向放大到2.0f[放大一倍]
ObjectAnimator mObjectAnimator2 = new ObjectAnimator.ofFloat(view,"scaleX", 1.0f, 2.0f);
//绕着x轴,旋转90°,最后又回来
ObjectAnimator mObjectAnimator3 = new ObjectAnimator.ofFloat(view,"rotationX", 0.0f, 90.0f, 0.0f);

AnimatorSet mAnimatorSet = new AnimatorSet();
mAnimatorSet.setDuration(1000);
mAnimatorSet.play(mObjectAnimator1).with(mObjectAnimator2).after(mObjectAnimator3);
mAnimatorSet.start();

上面介绍过,after之前添加动画的是在after之后执行。

上面执行的顺序:先执行mObjectAnimator3, 后面同时执行mObjectAnimator1和mObjectAnimator2

PropertyValuesHolder

PropertyValuesHolder也可以组合动画,但只能是多个动画一起执行。

Android属性动画

在XML中使用属性动画

属性动画也可以直接写在XML中。 在res文件中新建animator文件, 在里面新建一个scale.xml。

Android属性动画

参考文章

1.《Android进阶之光》

 历史上的今天

  1. 2022: Android Studio使用makejar导出jar包(0条评论)
  2. 2021: 徐志摩 :偶然(0条评论)
  3. 2020: [摘]final、finally与finalize的区别(0条评论)
  4. 2019: 林语堂:人生的乐趣(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

自定义垂直Seekbar之添加事件监听

前言本文是《自定义垂直Seekbar简介》基础上进行修改的,参考Android原生的SeekBar的setOnSeekBarChangeListener新增的。后面新增的,重新开一片文章记录一下。正文本文跟《自定义垂直Seekbar简介》内容差不多,就是新增了setOnSeekBarCha...

Android子线程是否可以更新UI么

前言本文内容主要摘抄[Android子线程是否可以刷新UI],这里只做简单的总结,具体还是看参考文章,谢谢。记录于此,只是方便自己查阅。小结Android子线程(非UI线程)可以刷新UI,前提条件是有自己的ViewRoot。Activity的onCreate()周期时可以在子线程...

adb shell input的使用

查看当前机器支持adb shell input 的命令如下可以查询C:\Users\Administrator>adb shellroot@android:/ # inputinputusage: input ...input text <string>input k...

Android Studio制作.9.png简单记录

前言项目中.9.png的用处很大,比如显示的title,需要一个背景图,由于文本长度不一,就需要使用这种.9.png图片。下面简单记(摘)录(抄)Android Studio制作.9.png的步骤。PS: 本文对网上大佬的文章进行简单记录而已,只是方便自己。好记性不如烂笔头正文Andro...

[摘]Android源码之init.rc文件规则和init.c解析

前言本文主要讲解Android源码之init.rc文件规则和init.c解析。本文摘抄网上大牛的文章(链接文末),方便自己查阅。多谢分享。正文init.c与init.rc在源码中的位置:init.c : /system/core/initinit.rc : /system/core...

Android中ImageView半边圆角处理记录2

前言之前介绍过对ImageView进行圆角处理,具体文章《Android中ImageView半边圆角处理记录 -91易搜 - 阅读是一种生活方式 ()》,后面发现网上还有一种更简单的一种方式。有点:代码少,简单缺点:边界不够圆滑(存在锯齿)正文具体效果如下(左侧是RoundImage...