分类 :传统动画(帧动画、补间动画)、属性动画
帧动画:
帧动画是动画中最容易实现的一种动画,其原理就是将一张张单独的图片给连贯的播放出来从而产生视觉上的动画效果(图片资源决定了这是一个什么样的动画)
在我们实现动画的代码中会见到 android:oneshot="false" 这行代码,这个oneshot 的含义就是动画执行一次(true)还是循环执行多次。
补间动画:
补间动画有四种形式:alpha(透明度),translate(位移),scale(缩放),rotate(旋转)。
这四种形式字义已经很好理解了接下来重点要说一下 interpolator 和 pivot
Interpolator 主要作用是可以控制动画的变化速率 ,就是动画进行的快慢节奏。
pivot 决定了当前动画执行的参考位置
这个pivot可能有点难理解,接下来我来详细的说一下这个pivot
pivotX取值 | 含义 |
---|---|
10 | 距离动画所在view自身左边缘10像素 |
10% | 距离动画所在view自身左边缘 的距离是整个view宽度的10% |
10%p | 距离动画所在view父控件左边缘的距离是整个view宽度的10% |
假如 pivotX的值是10 那么在这个动画开始后画面是在自身左边缘10像素处开始的,这个就需要大家去多加练习适应啦。
补间动画里还有三个比较重要的属性:
animation.setFillAfter 这个属性决定了动画在播放结束时是否保持最终的状态;
animation.setRepeatCount 决定了动画的重复次数
animation.setRepeatMode 决定了动画的重复方式
以上就是补间动画啦,接下来咱们再来看看属性动画
在补间动画中的动画方式属性动画是可以在同一时间实现的,因为属性动画针对的是动画的属性而补间动画针对的是动画本身的素材,所以属性动画的功能要比补间动画更加强大
看到这里你可能就会有疑问了,为什么属性动画比补间动画功能强大却没有代替补间动画呢?
相较于传统动画,属性动画有很多优势,但是并不能取代补间动画。因为两种动画都有各自的优势,属性动画如此强大,也不是没有缺点。两者还是有不同点的。
一、补间动画中,虽然使用translate将图片移动了,但是点击原来的位置,依旧可以发生点击事件,而属性动画却不是。因此我们可以确定,属性动画才是真正的实现了view的移动,补间动画对view的移动其实只是视觉上的错觉,实际的对象还是处于原来的地方。
二、当我们把动画的重复次数设置为无限循环时,如果在Activity退出时没有及时将动画停止,属性动画会导致Activity无法释放而导致内存泄漏,而补间动画却没有问题。因此,使用属性动画时切记在Activity执行 onStop 方法时顺便将动画停止否则就会造成内存不足而发生一些神奇的事情哦。