学习|Android属性动画的组合动画之二--AnimatorSet

学更好的别人,

做更好的自己。

——《微卡智享》

本文长度为2943,预计阅读8分钟


AnimatorSet组合动画

上一篇中《学习|Android属性动画的组合动画之一--AnimationSet》我们已介绍了AnimationSet的组合动画,也简单说了一下AnimationSet与AnijmatorSet的区别,这一篇我们就要说试一试AnimatorSet的效果。

AnimatorSet的使用

微卡智享

AnimatorSet和AnimationSet中的大部分播放设计的函数都是差不多的,但是相比较而言AnimatorSet要比AnimationSet要强大的多。上一篇中我们就说到AnimationSet中所有的动画效果是一起播放的,而AnimatorSet中是可以实现顺序播放的。

在AnimatorSet中给为我们提供了两个方法playSequentially和playTogether,

  • playSequentially 表示所有动画依次播放

  • playTogether 表示所有动画一起开始

playSequentially函数

public void playSequentially(Animator... items);
public void playSequentially(List<Animator> items);

上面两个方法的参数不同,第一个类型后面...在Android中代表的可变长参数,比较灵活,所以第一个参数比较常后,第二个类型就是自己定义一个List<Animator>的集合传入进去执行。

代码演示

private void AnimatorArray() {
        //设置动画一往X轴方向从2缩放到10
        ObjectAnimator animator1=ObjectAnimator.ofFloat(tvshow, "scaleX", 2, 10);
        //设置动画二往Y轴方向从2缩放到10
        ObjectAnimator animator2=ObjectAnimator.ofFloat(tvshow, "scaleY", 2, 10);

        AnimatorSet set=new AnimatorSet();
        //设置动画的基础属性
        set.playSequentially(animator1, animator2);

        set.setDuration(1000);//播放时长
        set.setStartDelay(100);//延迟播放
        set.setInterpolator(new AccelerateDecelerateInterpolator());
        set.start();
    }

上面代码我们设置了两个动画,第一个是设置动画一往X轴方向从2缩放到10,第二个是设置动画二往Y轴方向从2缩放到10。

上图是通过playSequentially实现的效果,我们可以看到,两个动画是按顺序播放的,即播放完了X轴横向的动画再播放到Y轴纵向的动画。

playTogether函数

public void playTogether(Animator... items);
public void playTogether(Collection<Animator> items);

上面两个方法的参数和上面的playSequentially是一样的,所以这里我就不再详细说明了,代码还是用刚才的,我们直接把playSequentially改为playTogether看看效果

上图是通过playTogether实现的效果,可以看出是同时播放的,和我们上一篇的AnimationSet是一样的效果。

用AnimatorSet实现的动画效果后,我们原来的控件效果会一直保留,就像上图中两个放大后就一直保存着放大的效果。

AnimatorSet.Builder(自由设置动画顺序)

AnimatorSet.Builder可以实现playSequentially和playTogether无法实现的效果,比如说有三个动画,我们想先放第二个后,然后第一个和第三个再同时播放,用playSequentially和playTogether是无法实现的,这里我们就可以用AnimatorSet.Builder来实现。

AnimatorSet.Builder
方法
描述
public Builder play(Animator anim)

表示要播放哪个动画。AnimatorSet中的play方法是获取AnimatorSet.Builder对象的唯一途径

public Builder with(Animator anim)和前面动画一起执行
public Builder before(Animator anim)执行前面的动画后才执行该动画
public Builder after(Animator anim) 执行先执行这个动画再执行前面动画
public Builder after(long delay)延迟n毫秒之后执行动画

代码演示

private void AnimatorArray() {
        //设置动画一往X轴方向从2缩放到10
        ObjectAnimator animator1=ObjectAnimator.ofFloat(tvshow, "scaleX", 2, 10);
        //设置动画二往Y轴方向从2缩放到10
        ObjectAnimator animator2=ObjectAnimator.ofFloat(tvshow, "scaleY", 2, 10);
        //设置动画三往X轴平移100再返回
        ObjectAnimator animator3=ObjectAnimator.ofFloat(tvshow, "translationX", 0, 100, 0);
        //设置动画四往Y轴平移100再返回
        ObjectAnimator animator4=ObjectAnimator.ofFloat(tvshow, "translationY", 0, 100, 0);

        AnimatorSet set=new AnimatorSet();
        //设置动画的基础属性
        set.play(animator1).with(animator2).after(animator3).before(animator4);

        set.setDuration(1000);//播放时长
        set.setStartDelay(100);//延迟播放
        set.setInterpolator(new AccelerateDecelerateInterpolator());
        set.start();
    }

上面代码我们在原来的基础又加了两个动画,动画三是向左平移100再返回动画四是向下平移100再返回。

上图中的设置属性说明先执行animator3(向左平移再返回),再同时执行animator1和animator2(横向及纵向同时放大),最后再执行animator4(向下平移再返回),接下来我们看看效果

本篇主要把关于AnimatorSet的常用方法介绍了一下,更多的细节操作可以查看AnimatorSet的一些相关文档。

扫描二维码

获取更多精彩

微卡智享

「 往期文章 」

学习|Android属性动画的组合动画之一--AnimationSet

学习|Android属性动画的基础介绍

实战|OpenCV图片修复配合鼠标简单使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值