自定义控件(动画)第一节:Android的animation的四种类型和基本使用

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  设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
(六)set 合集
用于多种动作组合使用,简单来说就是用set标签包裹所有的效果标签,animation的属性统一在set标签内设置即可。
<?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>  

(六) Interpolator插值器

其作用就是改变动画的频率效果,比如动画执行过程中的速度改变,亦或是开始和结束的速度等。

标签: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);

            }
        });
    }
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值