上篇我们分析了一个弹球的复杂动画,今天我们看一个点简单点属性动画 – AnimationCloning,它的位于animation/AnimationCloning 。从名字上我们可以看到要看的是动画的克隆,也就是复制,是怎么实现的实现的呢?
xiaoguo
在 AnimationCloning 实现非常简单,只有一个 button,点击就会触发动画,然后就是四个小球了,点击之后就发一系列动画,今天我们主要来看 MyAnimationView 实现,首先可以看到它继承了 ValueAnimator.AnimatorUpdateListener 接口,这个是用于监听动画更新的接口,我们这里只做了一件事,就是 invalidate()。很简单就是在动画更新的时候刷新 UI,这步很关键,如果不刷新 UI 我们根本看不到动画的改变,接下来看看 MyAnimationView 构造方法的操作

看到这有没有很眼熟?没错就是 addBall() 方法,这个在上次我们已经讲过了就不在赘述。在构造方法里,创建除了四个弹球,并确定位置,但是 addBll() 方法并没有绘制出来,而是在 onDraw() 方法中进行绘制,和 BouncingBalls 的机制是一致的,那么最核心的方法就是 createAnimation() 了,我们一起来看一下

这里就是创建动画的代码了,最开始创建的就是一个改变第一个弹球 y 坐标的属性动画,且动画时间为 500 毫秒,没什么好说的。接下来看 anim2,它是 anim1.clone() 克隆出来的,但是这时候就会有一个问题了,clon() 是完全的复制,如果时间使用的话动画会作用在第一个弹球上,所以我们通过 setTarget() 的方式,改变了它的作用对象,这样就没有问题了,关于 setTarget() 的问题我们在之前的文章中已经讲过了哦。

接下就是第三个弹球的动画了,先是创建科一个坠落的动画,并设置了加速度的 Interpolator,然后创建了一个升起的动画,并设置了 DecelerateInterpolator,最后被塞进了 AnimatorSet 里,并且播放的时候通过 playSequentially(animDown, animUp) 依次播放动画,造成先下降后上升的视觉效果。第四个弹球也是克隆的得第三个效果,没什么东西了。最后就是把这写动画都添加到 AnimatorSet ,并且通过playTogether(anim1, anim2, s1) 设置前三个弹球一起播放动画,然后 通过 playSequentially(s1, s2) 设置播放第三个动画后播放第四个弹球的动画,加起来就是 AnimationCloning 完整的动画了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注