Android的animation有四种类型:alpha(渐变透明)、scale(渐变尺寸)、translate(移动位置)、rotate(旋转);
在Android studio 的xml文件中个别属性不会提示,所以方便编码,属性标签进行记录。
(一)alpha -- 透明渐变
属性标签:
- android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
- android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
代码示例:
<?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="1" android:toAlpha="0" android:duration="3000" android:fillBefore="true" />
(二)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一样。
代码示例:
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="0.0" android:toXScale="1.4" android:fromYScale="0.0" android:toYScale="1.4" android:pivotX="50" android:pivotY="50" android:duration="700" />
(三)translate-- 位置移动
属性标签:
- android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
- android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
- android:toXDelta 结束点X轴坐标
- android:toYDelta 结束点Y轴坐标
代码示例:
<translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="-80" android:fromYDelta="0" android:toYDelta="-80" android:duration="2000" android:fillBefore="true"/>
(四)rotate-- 旋转
属性标签:
- android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
- android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
- android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
- android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
代码示例:
android:fromDegrees="0" android:toDegrees="-650" android:pivotX="50%" android:pivotY="50%" android:duration="3000" android:fillAfter="true"
(五)animation -- 基类
Animation类是所有动画(scale、alpha、translate、rotate)的基类,这里以scale标签为例,讲解一下,Animation类所具有的属性及意义。
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fillAfter="true"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" /> <scale android:fromXScale="0.0" android:fromYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.4" android:toYScale="1.4" /> <rotate android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="720" /> </set>
其作用就是改变动画的频率效果,比如动画执行过程中的速度改变,亦或是开始和结束的速度等。
标签:android:interpolator = "@android:anim/accelerate_decelerate_interpolator"
1)@android:anim/accelerate_decelerate_interpolator
在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
2)@android:anim/accelerate_interpolator
在动画开始的地方速率改变比较慢,然后开始加速
3)@android:anim/anticipate_interpolator
开始的时候向后然后向前甩
4)@android:anim/anticipate_overshoot_interpolator
开始的时候向后然后向前甩一定值后返回最后的值
5)@android:anim/bounce_interpolator
动画结束的时候弹起
6)@android:anim/cycle_interpolator
动画循环播放特定的次数,速率改变沿着正弦曲线
7)@android:anim/decelerate_interpolator
在动画开始的地方快然后慢
8)@android:anim/linear_interpolator
以常量速率改变
9)@android:anim/overshoot_interpolator
向前甩一定值后再回到原来位置
(七)使用
public class MainActivity extends AppCompatActivity {
private Button bt_tob;
private TextView tv_test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_tob = findViewById(R.id.bt_gob);
tv_test = findViewById(R.id.tv_test);
// 创建animation对象,构建时传入xml文件id。 final Animation animation = AnimationUtils.loadAnimation(this, R.anim.xuanzhuan); bt_tob.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
// 启动动画 tv_test.startAnimation(animation); } }); } }