您的位置:首页 > 移动开发 > Android开发

Android属性动画-Property Animation(四) 组合动画

2015-07-03 09:54 363 查看

(一)、使用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标签的对应如下:

ValueAnimator -
<animator>

ObjectAnimator -
<objectAnimator>


AnimatorSet
-
<set>


下面我们看一个例子:


res/animator/property_animator.xml

MainActivity中要用inflater将xml文件加载进来



补充:如果要实现一个同时执行的动画集,我们还有简便方法。
按照前面的学习,我们是这样写的:

然而我们还可以这样写:

最简便的方法是这样写:

一句话就搞定了,而且ViewPropertyAnimator不仅简单,而且性能也很高,他只会调用一次invalidate()方法,而不是每一个单独的动画都要独立调用一次invalidate()。但是简便肯定就有他的局限性,这样只能实现淡入淡出、平移、旋转等动画效果,如果想要改变背景颜色就不成了。

关于属性动画我们已经全部分析完了。实现属性动画有好多种方法,简单的也有复杂的也有。简单会有局限,复杂会比较灵活,我们应该根据实际的需求,合理选择最佳的实现方式。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: