动画
帧动画
补间动画
属性动画
Interpolator
帧动画 FrameAnimation
其实就是一个Drawable ,将一系列的图片联合起来顺序的播放。形成动画效果。
帧动画本质就是一些图片的集合,要播放这个动画就必须将一系列的图片全部加载进内存中,所以帧动画的图片不易过大。
创建drawable文件
oneshot :是否只播放一次,
drawable :一帧的图片
duration :一帧播放的时间 毫秒单位
1 |
|
使用刚才的drawable文件做背景
1 |
|
播放动画
1 |
|
补间动画 tweenAnimation
主要是对view的内容完成一系列的图形变换(缩放,透明,旋转,平移)来实现动画效果。
具体来说就是 预先定义一些指令 ,这些指令指定了图形变换的类型,触发时间,持续时间。指令可以预先定义在xml文件中也可以源代码的方式定义。程序沿着时间线执行这些指令就可以实现动画效果。
Android中提供了 Animation,Interpolator,Transformation 等类具体实现Tween动画,
Animation类及其子类是动画的核心模块,它实现了 各种动画效果如 平移 旋转 缩放 改变透明度等等。
Tween动画的每一帧都根据Interpolator对view的内容做一次图像变换,因此Animation的核心工作是做变换(transformation);
Animation是基类 ,它记录了动画的通用属性和方法。主要的属性包括动画持续时间、重复次数、Interpolator等。
常用属性
duration :动画时间 毫秒
infinite :无限次
fillAfter 是否停顿在最后一针
repeatMode 重复模式 值:restart 重新开始 reserve 反复
repeatCount :重复次数
startOffset :开始延迟时间
常用Animation子类:
AlphaAnimation 改变Alpha值
TranslationAnimation 平移动画
RotateAnimation 旋转动画
ScaleAnimation 缩放动画
AnimationSet 动画集合
实例
补间动画 既可以使用 xml文件预先定义 也可以使用代码动态创建;
使用xml文件定义必须在 res/anim/目录下创建 文件;
可以使用 AnimationUtils的静态方法 loadAnimation()将动画文件加载
AlphaAnimation 透明度改变动画
定义 AlphaAnimation 文件
1 |
|
加载 动画文件并播放
1 |
|
代码创建
1 |
|
TranslationAnimation 平移动画
fromXDelta X轴开始坐标
toXDelta X轴结束坐标
fromYDelta Y 轴开始坐标
toYDelta Y轴结束坐标
>
定义动画文件
1 |
|
加载动画并播放
1 |
|
代码创建动画
1 |
|
RotateAnimation 旋转动画
fromDegrees:起始角度
toDegrees:到达角度
pivotX:X轴中心点
pivotY:Y轴中心点
中心点取值模式:
固定像素 50
相对于自身 50%
相对于父容器 50%p
定义动画文件
1 |
|
加载动画并播放
1 |
|
代码创建动画
1 |
|
沿中心旋转 45°
1 |
|
ScaleAnimation 缩放动画
fromXScale:X轴起始缩放值
fromYScale:Y轴起始缩放值
toXScale:X轴到达缩放值
toYScale:Y轴到达缩放值
缩放值可以是缩放倍数,也可以是缩放到具体尺寸
定义动画文件
1 |
|
加载动画并播放
1 |
|
代码创建动画
1 |
|
AnimationSet 动画集合
定义动画文件
1 |
|
加载动画并播放
1 |
|
代码创建动画
1 |
|
Interpolator
Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。
常用的差值器
LinearIntepolator 匀速效果
DecelerateInterpolator 减速效果
Accelerateinterpolator 加速效果
CycleInterpolator 循环效果
BouncedInterpolator 弹跳效果
Property Animation 属性动画
属性动画的用处有很多很多,我就列几个常用的方式把;具体参考官网文档:https://developer.android.com/guide/topics/graphics/prop-animation.html
补间动画并不能改变view真实的位置,只是形式上的位置改变。而属性动画会将view的真实位置改变。
属性动画定义必须在 res/animator目录下
ValueAnimation
valueType 常用三种取值:
intType整数值、
floatType浮点值、
colorType颜色值、
定义动画文件
1 |
|
加载动画 并添加 动画监听
属性动画 就是在 监听中去改变控件的属性的值 ,让控件 位置和形态的属性都发生真正的变化
1 |
|
代码创建
1 |
|
ObjectAnimator
大部分属性都和ValueAnimator相同,只多了对要控制改变的控件的属性的声明
propertyName:要控制的控件的属性名;
动画会直接修改制定属性名的属性
需要注意:设置了getter/setter方法的属性才能生效
定义动画文件
1 |
|
加载动画并设置播放动画的对象
1 |
|
代码创建动画
凡是 有get/set方法的属性都可以设置值
1 |
|
完整代码github地址:https://github.com/sky-mxc/AndroidDemo/tree/master/animation