概述
随着开发的深入,动画在开发中的运用会越来越多,如Activity的切入切出,从底部弹出一个dialog,都需要动画的辅助,,如果想加入一些绚丽的动画效果就更需要学习一下Animation了
Android 中的动画分为两类,View Animation(视觉动画) 和 Property Animator(属性动画) ,两者还是有一定区别的。
-
View Animation 包括 Tween Animation(补间动画) 和 Frame Animation(帧动画)
-
Property Animator 包括Value Animator 和 Object Animator
两者的差异:
-
引入的时间不同 View Animation 在Android 1.0 (API 1)就引入了,,而 Property Animator 是在Android 3.0 (API 11)才引入的
-
所在的包也不相同 View Animation 在包android.view.animation中 而 Property Animator 在包 android.animation中
-
动画的命名也不相同 View Animation 的命名都是以Animation命名的 ,而Property Animator 都是以Animator命名的
-
View Animation 是改变视图控件的外在展示 ,而无法改变它原来的属性 ,而Property Animator 是改变视图控件的属性
-
View Animation仅能对指定的控件做动画,而Property Animator是通过改变控件某一属性值来做动画的。 (和上一条雷同)
而今天我们重点讲解一下View Animation
View Animation
官方文档有四部分组成
- alpha 透明渐变动画效果
- scale 尺寸大小渐变动画效果
- translate 移动渐变动画效果
- rotate 旋转动画渐变效果
今天主要是通过定义xml的形式介绍View Animation 定义的动画xml要放在 res/anim资源文件夹中 首先看一下Animation的基本属性
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等
1:alpha (透明度)*
- android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
- android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
2:scale (尺寸)
- android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
- android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
- android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
- android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
- android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标 android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样
3:translate (移动)
- android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
- android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
- android:toXDelta 结束点X轴坐标 ,可以是数值、百分数、百分数p 三种样式;
- android:toYDelta 结束点Y轴坐标 ,可以是数值、百分数、百分数p 三种样式;
4:rotate (旋转)
- android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数 如 0
- android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数 如 270
- android:pivotX 旋转点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
- android:pivotY 旋转点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
5:set(集合 上面每中只能展示一种动画 ,而set可以把他们集合起来。。)
xml展示
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000">
<alpha
android:fromAlpha="0"
android:toAlpha="1"/>
<scale
android:pivotY="50%"
android:pivotX="50%"
android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1"
android:toYScale="1"/>
<rotate
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="360"
/>
<translate
android:fromXDelta="-200"
android:fromYDelta="-200"
android:toXDelta="0"
android:toYDelta="0"
/>
</set>
代码的用法
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_animation_alpha);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
show_imageView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
show_imageView.startAnimation(animation);
插值器 Interpolator
Interpolator属性是Animation类的一个XML属性,alpha、scale、rotate、translate、set都有这个属性 Interpolator的系统值有下面几个:
- @android:anim/accelerate_decelerate_interpolator - AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
- @android:anim/accelerate_interpolator - AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
- @android:anim/anticipate_interpolator - AnticipateInterpolator 开始的时候向后然后向前甩
- @android:anim/anticipate_overshoot_interpolator - AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
- @android:anim/bounce_interpolator - BounceInterpolator 动画结束的时候弹起
- @android:anim/cycle_interpolator - CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
- @android:anim/decelerate_interpolator - DecelerateInterpolator 在动画开始的地方快然后慢
- @android:anim/linear_interpolator - LinearInterpolator 以常量速率改变
- @android:anim/overshoot_interpolator - OvershootInterpolator 向前甩一定值后再回到原来位置