前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习|Android属性动画的组合动画之一--AnimationSet

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

作者头像
Vaccae
发布2019-11-25 16:03:06
3K0
发布2019-11-25 16:03:06
举报
文章被收录于专栏:微卡智享微卡智享

学更好的别人,

做更好的自己。

——《微卡智享》

本文长度为2739,预计阅读7分钟

Android组合动画

上篇文章我们介绍了《学习|Android属性动画的基础介绍》,里面只做了一个简单的动画例子,其实真正使用的时候一般我们都是通过动画的多样组合进行播放的,本章就专门介绍一下Android中的动画组合之一AnimationSet的介绍。

动画组合的四种方式

AnimationSet和Animatorset

一般来说,Android实现动画组合有四种方式,分别是:

  • AnimationSet
  • AnimatorSet
  • PropertyValuesHolder
  • ViewPropertyAnimator

个人来说我用到的基本就前两种,所以也主要就介绍一下前两种。前两种的名称差不多,其实也是有其不同之处,这里简单介绍一下两个的不同点。

AnimationSet和Animatorset

数字1代表AnimationSet 数据2代表Animatorset

1

动画都是是同时执行

不支持背景色的修改

Animation 的子类

2

动画可以按先后顺序执行

支持背景色的修改

Animator 的子类

AnimationSet的使用

微卡智享

一般来我说我们在App中常用的都是一些视图动画:包括透明动画(AlphaAnimation)旋转动画(RotateAnimation)移动动画(TranslateAnimation)缩放动画(ScaleAnimation),我们用AnimationSet就可以把这些动画组合起来实现我们想要的效果。

我们通过定义上面那四种动画组合,再使用animationSet.addAnimation的函数把动画加进来即可实现该效果。下面是列出来AnimationSet的几个比较常用的函数方法:

函数名

参数

说明

构造函数

boolean interpolator

true:代表使用默认的interpolatorfalse:代表使用自定义interpolator

addAnimation

Animation a

添加定义好的动画效果

setDuration

long time

设置播放时长(毫秒)

setRepeatCount

int count

设置重放次数

setRepeatMode

int repeatmode

设置重放模式

setInterpolator

interpolator i

设置插值器

setFillAfter

boolean b

是否保持动画完成后的位置 ‍

setFillBefore

boolean b

是否保持动画开始时的状态 ‍

cancel

取消AnimationSet

reset

释放AnimationSet

划重点

上面的函数中setRepeatCount和setRepeatMode两个函数我用别的颜色标注了,主要是因为在使用的过程中发现不起作用,后来在网上找了找资料后发现在AnimationSet使用这个没有效果,需要在对应的Animaion的动画里面设置才行。

代码实现

微卡智享

我们在还是用上一章中那个Demo,新建一个AnimationScale的函数

代码语言:javascript
复制
private void AnimationScale() {
        //构造方法的入参如果是“true”,则代表使用默认的interpolator,如果是“false”则代表使用自定义interpolator
        AnimationSet animationSet=new AnimationSet(false);

        //透明度从0至1
        AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
        //旋转两圈
        RotateAnimation rotateAnimation=new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        //放大十倍
        ScaleAnimation scaleAnimation = new ScaleAnimation(1f, 10, 1f, 10, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        scaleAnimation.setRepeatCount(1);
        scaleAnimation.setRepeatMode(Animation.REVERSE);
        //平移距离x方向为父控件宽的30.5%,y方向为父控件高的30.5%
        TranslateAnimation translateAnimation=new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_PARENT, 0.305f, Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_PARENT, 0.305f);
        translateAnimation.setRepeatCount(1);
        translateAnimation.setRepeatMode(Animation.REVERSE);
        animationSet.addAnimation(alphaAnimation);
        animationSet.addAnimation(rotateAnimation);
        animationSet.addAnimation(scaleAnimation);
        animationSet.addAnimation(translateAnimation);
        //设置动画时长为1秒
        animationSet.setDuration(2000);
        animationSet.setRepeatMode(AnimationSet.REVERSE);
        //设置插值器为先加速再减速
        animationSet.setInterpolator(new AccelerateDecelerateInterpolator());
        //动画完成后保持位置
        animationSet.setFillAfter(false);
        //保持动画开始时的状态
        animationSet.setFillBefore(true);
        //取消动画
        animationSet.cancel();
        //释放资源
        animationSet.reset();
        //开始动画
        tvshow.startAnimation(animationSet);

    }

然后在btntest2的按钮下加入点击事件调用刚才创建的函数

运行起来的效果如图

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档