Android属性动画-Property Animation(四) 组合动画
16lz
2021-01-26
(一)、使用AnimatorSet实现动画集
之前我们研究的都是一个动画一个动画的单独播放,而在很多时候,我么需要将几个动画,以某种逻辑顺序来执行。我们可以用AnimatorSet来组合各种各样的动画。
首先我们先来看这样一个动画:
这个动画集由{下落动画,改变背景颜色动画,改变字体颜色动画}组成的。他们是同时执行的
布局文件如下:
MainActiity如下: 我们还可以这样写: 如果是同时执行的动画,我们这样写在一行是没有问题的,但是谷歌并不推荐我们这样写,因为一个动画集中可能还会牵扯到谁先执行,谁后执行,before,after什么的。如果都写在一行,首先系统是分辨不出到底谁先谁后的,其次我们自己也会乱的。所以我们应该分行写 下面看一个先后执行的动画:我们还可以这样写: 我们还可以有多个AnimaorSet嵌套使用
但是这样会有一个问题,当我们再次点击砖块的时候,直接是一个原来两倍大的砖块往下掉!相信大家应该知道为什么了,就是砖块的属性已经被我们改变了,第一次动画执行完毕后,砖块的大小已经被改变了,而我们没有把他的大小再还原回去。为了解决这个问题,我们可以添加一个动画监听器
(二)、使用Animation Listeners动画监听器
这样就没有问题了!我们发现,上面的监听器中我们只用到了onAnimationStart方法,其余的方法全部都重写出来了,然而我们却不需要使用他们,谷歌充分考虑了我们的需要,提供了AnimatorListenerAdapter,我们只需要重写出我们想要的方法就可以了。代码如下:
(三)、使用XML实现属性动画
属性动画也可以使用xml来实现,使用xml实现的好处是我们可以在任意一个activity使用我们的属性动画,而使用java代码方式只能让我们在当前activity上面使用。
以前我们使用View Animation的时候,我们要在我们工程目录下的res目录下新建一个anim文件夹,里面写我们的动画xml文件。在Android 3.1以后,为了和View Animation区分开,我们要在res目录下新建一个animator的文件夹,里面写我们的属性动画的xml文件。
属性动画的java实现类与xml标签的对应如下:
<animator>
<objectAnimator>
AnimatorSet
-<set>
下面我们看一个例子:
res/animator/property_animator.xml
MainActivity中要用inflater将xml文件加载进来补充: 如果要实现一个同时执行的动画集,我们还有简便方法。 按照前面的学习,我们是这样写的: 然而我们还可以这样写: 最简便的方法是这样写: 一句话就搞定了,而且ViewPropertyAnimator不仅简单,而且性能也很高,他只会调用一次invalidate()方法,而不是每一个单独的动画都要独立调用一次invalidate()。但是简便肯定就有他的局限性,这样只能实现淡入淡出、平移、旋转等动画效果,如果想要改变背景颜色就不成了。
关于属性动画我们已经全部分析完了。实现属性动画有好多种方法,简单的也有复杂的也有。简单会有局限,复杂会比较灵活,我们应该根据实际的需求,合理选择最佳的实现方式。
更多相关文章
- Android模拟开关按钮点击打开动画(属性动画之平移动画)
- Android之增长的数字(仿支付宝资产数字)
- 权限
- 关于TextView的android:ellipsize="end"属性无效的挣扎
- Android(安卓)补间动画之平移动画TranslateAnimation
- 如何实现Android应用的启动画面(闪屏)?
- android viewPager滑动速度设置
- Android(安卓)项目实践(三)——数据库封装
- android 搜索