(一)、使用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()。但是简便肯定就有他的局限性,这样只能实现淡入淡出、平移、旋转等动画效果,如果想要改变背景颜色就不成了。

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

    更多相关文章

    1. Android模拟开关按钮点击打开动画(属性动画之平移动画)
    2. Android之增长的数字(仿支付宝资产数字)
    3. 权限
    4. 关于TextView的android:ellipsize="end"属性无效的挣扎
    5. Android(安卓)补间动画之平移动画TranslateAnimation
    6. 如何实现Android应用的启动画面(闪屏)?
    7. android viewPager滑动速度设置
    8. Android(安卓)项目实践(三)——数据库封装
    9. android 搜索

    随机推荐

    1. Android(安卓)ADB
    2. 诚聘Android开发工程师
    3. android的selector背景选择器
    4. android之声音管理器AudioManager的使用
    5. Android规范详解
    6. 浅谈Android的Rotation动画的应用
    7. Android(安卓)文件格式
    8. Android的权限控制机制
    9. Android属性动画,从源码的角度分析
    10. android Service之四:传递复杂数据类型的