Android自定义View:如何实现类钟摆的动画效果?
By Long Luo
继第一篇 Android自定义View:如何实现一个模拟时钟? ,我们使用Android自定义View实现了一款模拟表盘,第二篇 Android自定义View:另一种实现手表指针转动的方法 ,我们又通过另外一种方法实现了手表指针的另外一种转动实现。
在日程生活中,我们常见的挂钟实际都是有个钟摆的,那么,如果我们想在我们所作的模拟时钟实现这种钟摆动画呢?那么具体应该如何实现呢?
一、钟摆
遇到问题,我们需要先分析钟摆动画的具体动画效果,然后再做下一步工作。
单摆是能够产生往复摆动的一种装置,将无重细杆或不可伸长的细柔绳一端悬于重力场内一定点,另一端固结一个重小球,就构成单摆
那么钟摆就是在一定角度内来回摆动,具体更多细节可以自行Google。
二、Android Animation分析
在这一节里,我们会简单谈谈Android动画。
2.1 动画分类
Android动画目前可分为以下3种:
2.1.1 补间动画(Tween Animation)
所谓的补间动画,其实就是定义了我们动画的起始点和终止点的状态,而动画的过程我们是不关心的,只需要达到我们想要的效果就行。
- 渐变动画支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(Alpha)
- 只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应
- 组合使用步骤较复杂。
- View Animation也是指此动画
对于补间动画来说,无论是用纯java代码构建Animation对象,还是通过xml文件定义Animation,其实最终的结果都是1
2
3
4Animation a = new AlphaAnimation();
Animation b = new ScaleAnimation();
Animation c = new RotateAnimation();
Animation d = new TranslateAnimation();
2.1.2 帧动画(Frame Animation)
所谓的帧动画就是可以设置我们的动画的每一帧的效果,其实视频或者Gif的效果都是由许多张图片在很短的时间内播放,从而产生动画效果。
- 用于生成连续的Gif效果图。
- DrawableAnimation也是指此动画。
2.1.3 属性动画(Property Animation)
属性动画是Android动画里面最复杂也是最能做出复杂的动画效果的一种类型。
- 支持对所有View能更新的属性的动画(需要属性的setXxx()和getXxx())。
- 更改的是View实际的属性,所以不会影响其在动画执行后所在位置的正常使用。
- Android3.0(API 11)及以后出现的功能,3.0之前的版本可使用github第三方开源库nineoldandroids.jar进行支持。
属性动画的相关的API:
- ValueAnimator:值动画执行类,常配合AnimatorUpdateListener使用。
- ObjectAnimator:对象动画执行类。
- PropertyValuesHolder: 属性存储器,为两个执行类提供更新多个属性的功能。
- AnimatorListener:动画执行监听,在动画开始、重复、结束、取消时进行回调。
- Keyframe:为PropertyValuesHolder提供多个关键帧的操作值。
- AnimatorSet:一组动画的执行集合类:设置执行的先后顺序,时间等。
- TimeInterpolator:时间插值,用于控制动画执行过程。
- AnimatorUpdateListener:动画更新监听。
- TypeEvaluator:类型估值,用于设置复杂的动画操作属性的值。
ValueAnimator和ObjectAnimator是属性动画里面经常使用的对象类,ObjectAnimator是 ValueAnimator的子类。
当然Android属性动画是很复杂,达到熟练运用还需要深入研究,大家想了解可以去网上寻找相关知识学习。