Android客户端UI动画笔记|青训营笔记

212 阅读3分钟

这是我参与「第四届青训营」笔记创作活动的第十三天。这篇笔记主要是对安卓客户端常规&高级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种动画效果,其他动画效果也可以实现

应用场景

与属性相关、复杂的动画

总结

通过这部分的学习,我了解到了安卓客户端动画的相关知识,包括帧动画、补间动画、属性东动画等类型。它们各有优缺点,根据不同的场景来选择。