这是我参与「第四届青训营」笔记创作活动的第十三天。这篇笔记主要是对安卓客户端常规&高级UI编程”这节课中动画相关部分的记录。
笔记
动画
帧动画
作用对象
视图控件(View),如ImageView、TextView等,不可作用于View的属性,如:宽度、高度等。
原理
- 将动画分解为“帧”的形式,每一帧等于一张图片;
- 按指定顺序和间隔播放一组图片
- 可简单类比于GIF
特点
优点:使用简单、方便
缺点:功能单一,容易OOM
应用场景
连续性动画
补间动画
作用对象
视图控件(View),如ImageView、TextView等,不可作用于View的属性,如:宽度、高度等。
原理
通过确定开始视图样式和结束视图样式,中间样式由系统根据差值确定来形成完整动画。
动画类型
- 透明度动画
- 旋转动画
- 缩放动画
- 平移动画
特点
优点:使用简单、方便
缺点:只能控制视图效果,无法控制属性
应用场景
- 转场动画
- 视图基础动画
插值器Interpolator
是一个接口,设置属性值从初始值过渡到结束值的变化规律
| java类 | xml id值 | 摘述 |
|---|---|---|
| AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 动画始来速率较慢,中问加速 |
| AccelerateInterpolator | @android:anim/accelerate_interpolator | 动画开始速率较慢,之后慢慢加速 |
| AnticipateInterpolator | @android:anim/anticipate_interpolator | 开始的时候从后向前甩 |
| AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 类似上面AnticipateInterpolator |
| BounceInterpolator | @android:anim/bounce_interpolator | 动画结来时弹起 |
| CycleInterpolator | @android:anim/cycle_interpolator | 循环播放速率改变为正弦曲线 |
| DecelerateInterpolator | @android:anim/decelerate_interpolator | 动画开始快然后慢 |
| LinearInterpolator | @android:anim/linear_interpolator | 动画匀速改变 |
| OvershootInterpolator | @android:anim/overshoot_interpolator | 向前弹出一定值之后回到原来位置 |
| PathInterpolator | 新增,定义路径坐标后按照路径坐标来跑 |
View对话小结
背景
Android系统一开始就提供了两种实现动画的方式:帧动画,补间动画
问题
帧动画、补间动画的功能和扩展有较大的局限:
1.作用对象局限:只能作用于View,不可作用于其他对象
2.只能改变View的视觉效果,无法改变View的属性:eg.View从A区域通过补间动画平移至B区域,点击B区域的View是没有效果的,补间动画只是将View绘制在B区域,改变了视觉效果,实际上View还是在A区域
3.动画效果单一:
- 帧动画只能实现类似GIF动画效果
- 补间动画只能实现透明度、旋转、缩放和平移这四种动画效果,一旦遇到相对复杂的动画效果,即超过4种类型外的动画效果,就无法实现
解决方案
属性动画
属性动画
作用对象
任意java对象,不再局限于视图控件(View)
原理
在指定的时间间隔内,通过不断对值的改变和不断将值赋给对象的属性,从而实现该对象在该属性上的动画效果。
特点
- 作用对象进行了扩充:不局限于View对象
- 动画效果丰富:不只是补间动画对应的4种动画效果,其他动画效果也可以实现
应用场景
与属性相关、复杂的动画
总结
通过这部分的学习,我了解到了安卓客户端动画的相关知识,包括帧动画、补间动画、属性东动画等类型。它们各有优缺点,根据不同的场景来选择。