Day6 动画二:补间动画

本文详细介绍了Android中四种基本动画的实现方式,包括XML和Java代码实现的透明度动画、平移动画、旋转动画以及缩放动画。同时,讲解了如何通过组合动画Set实现多个动画的串联播放,并介绍了差值器的使用以及动画监听的实现,为开发者提供了完整的Android动画操作实例。
摘要由CSDN通过智能技术生成

一.效果

1.平移动画(TranslateAnimation)

在这里插入图片描述

2.旋转动画(RoateAnimation)

在这里插入图片描述

3.透明度动画(AlphaAnimation)

在这里插入图片描述

4.缩放动画(ScaleAnimation)

在这里插入图片描述

二.透明度动画

1.方式一:xml实现

基本属性:

  • android:fromAlpha 动画开始的透明度,从0.0 -1.0 ,0.0表示全透明,1.0表示完全不透明
  • android:toAlpha 动画结束时的透明度,也是从0.0 -1.0 ,0.0表示全透明,1.0表示完全不透明

其他属性:

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
    0- android:duration 动画的持续时长,以毫秒为单位

在这里插入图片描述
alphaFile.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromAlpha="0"
    android:toAlpha="1"
    android:duration="2000"
    >
</alpha>

Java代码:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.alphafile);
iv.startAnimation(animation);

2.方式二:java代码实现

    private void createAlphaAnimation() {
        AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);//透明度从0到1 渐渐显示  1到0 渐渐隐藏
        alphaAnimation.setDuration(2000);//设置时长
        alphaAnimation.setRepeatCount(3);//设置循环次数
        alphaAnimation.setRepeatMode(Animation.REVERSE);//倒叙
        tweenAnimImg.startAnimation(alphaAnimation);
    }

三.平移动画Translate

1.方式一:xml实现

基本属性:

  • android:fromXDelta 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
  • android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
    • android:toXDelta 结束点X轴坐标
    • android:toYDelta 结束点Y轴坐标

其他属性:

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
    0- android:duration 动画的持续时长,以毫秒为单位

在这里插入图片描述
translatefile.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1"
    android:toXScale="2"
    android:fromYScale="1"
    android:toYScale="2"
    android:duration="2000"
    android:pivotX="50%"
    android:pivotY="50%"
    >
</scale>

Java代码:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.translatefile);
iv.startAnimation(animation);

2.方式二:java代码实现

     //平移
    private void createTranslateAnimation() {
        //方式一:参数一 x起始位置 参数二 x终止位置  参数三 y起始位置 参数四 y终止位置
        TranslateAnimation translateAnimation = new TranslateAnimation(0, 50, 0, 50);
        //方式二(设置参照点):参数一 x起始位置参照形式 参数二 x起始位置  参数三 x终止位置参照形式 参数四 x终止位置 参数五 y起始位置参照形式 参数六 y起始位置  参数七 y终止位置参照形式 参数八 y终止位置
        TranslateAnimation translateAnimation1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1);
        translateAnimation1.setDuration(2000);
        tweenAnimImg.startAnimation(translateAnimation1);
    }

三.旋转动画Roate

1.方式一:xml实现

基本属性:

  • android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

其他属性:

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
    0- android:duration 动画的持续时长,以毫秒为单位

在这里插入图片描述
roatefile.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="-50"
    android:toDegrees="50"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount = "5"
    android:repeatMode="reverse"
    android:duration="2000"
    >

</rotate>

Java代码:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.roatefile);
iv.startAnimation(animation);

2.方式二:java代码实现

     //旋转
    private void createRoateAnimation() {
        //方式一:参数一 起始角度  参数二 终止角度
        RotateAnimation rotateAnimation = new RotateAnimation(90, 180);
        //方式二(设置参照点): 参数一 起始角度  参数二 终止角度 参数三:x参照旋转点形式 参数四:x的0.5倍 参数五:y参照旋转点形式 参数六:y的0.5倍
        RotateAnimation rotateAnimation1 = new RotateAnimation(90, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

        rotateAnimation1.setDuration(2000);//设置时长
        rotateAnimation1.setFillAfter(true);//动画结束是画面停留在此动画的最后一帧
        // rotateAnimation1.setFillBefore(false);//动画结束时画面停留在此动画的第一帧

        tweenAnimImg.startAnimation(rotateAnimation1);


    }

四.缩放动画Scale

1.方式一:xml实现

基本属性:

  • 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一样。

其他属性:

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
    0- android:duration 动画的持续时长,以毫秒为单位

在这里插入图片描述
scalefile.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1"
    android:toXScale="2"
    android:fromYScale="1"
    android:toYScale="2"
    android:duration="2000"
    android:pivotX="50%"
    android:pivotY="50%"
    >

</scale>

Java代码:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.scaleefile);
iv.startAnimation(animation);

2.方式二:java代码实现

    //缩放
    private void createScaleAnimation() {
        //方式一:参数一 x起始大小 参数二 x终止大小 参数三 y起始大小 参数四 y终止大小
        ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.5f, 1, 0.5f);
        //方式二(设置参照点):参数一 x起始大小 参数二 x终止大小 参数三 y起始大小 参数四 y终止大小 参数五:x参照旋转点形式 参数六:x的0.5倍 参数七:y参照旋转点形式 参数八:y的0.5倍
        ScaleAnimation scaleAnimation1 = new ScaleAnimation(1, 2, 1, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);


        scaleAnimation1.setDuration(2000);
        tweenAnimImg.startAnimation(scaleAnimation1);

    }

五.组合动画Set

1.方式一:xml实现

在这里插入图片描述
setfile.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="4000"
        ></alpha>
    <rotate
        android:fromDegrees="-50"
        android:toDegrees="50"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="4000"
        ></rotate>
    <scale
        android:fromXScale="1"
        android:toXScale="2"
        android:fromYScale="1"
        android:toYScale="2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="4000"
        ></scale>
    <translate
        android:fromXDelta="0"
        android:toXDelta="100%"
        android:fromYDelta="0"
        android:toYDelta="200%"
        android:duration="4000"
        ></translate>
</set>

Java代码:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.scaleefile);
iv.startAnimation(animation);

2.方式二:java代码实现

    //动画集合:从屏幕左侧移动到右侧,渐渐显示,移动到屏幕正中心,旋转并放大2倍,在缩小到原来位置
    private void createAnimationSet() {
        //2.通过代码生成方式
        AnimationSet animationSet = new AnimationSet(true); //true表示共用同一个插值器
        //透明度从0至1
        AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
        //旋转两圈
        RotateAnimation rotateAnimation = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        //放大三倍
        ScaleAnimation scaleAnimation = new ScaleAnimation(0.1f, 3, 0.1f, 3, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        //平移距离x方向为父控件宽的35%,y方向为父控件高的42.5%
        TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.35f, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.425f);
        animationSet.addAnimation(alphaAnimation);
        animationSet.addAnimation(rotateAnimation);
        animationSet.addAnimation(scaleAnimation);
        animationSet.addAnimation(translateAnimation);
        //设置动画时长为3秒
        animationSet.setDuration(3000);
        //设置插值器为先加速再减速
        animationSet.setInterpolator(new AccelerateDecelerateInterpolator());
        //动画完成后保持位置
        animationSet.setFillAfter(true);
        //开始动画
        tweenAnimImg.startAnimation(animationSet);
    }

六.差值器

在这里插入图片描述
1.通过xml设置差值器

<set
xmlns:android="http://schemas.android.com/apk/res/android"
<!--运动结束时弹起-->
android:interpolator="@android:anim/bounce_interpolator">
<!--平移动画标签-->
<translate
    android:fromXDelta="0%p"
    android:toXDelta="20%p"
    android:fromYDelta="0%p"
    android:toYDelta="20%p"
    android:duration="4000"/>
<!--缩放动画标签-->
</set>

在这里插入图片描述
2.通过java代码设置差值器

 //旋转
    private void createRoateAnimation() {
        //方式一:参数一 起始角度  参数二 终止角度
        RotateAnimation rotateAnimation = new RotateAnimation(90, 180);
        //方式二(设置参照点): 参数一 起始角度  参数二 终止角度 参数三:x参照旋转点形式 参数四:x的0.5倍 参数五:y参照旋转点形式 参数六:y的0.5倍
        RotateAnimation rotateAnimation1 = new RotateAnimation(90, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        rotateAnimation.setInterpolator(new BounceInterpolator());//设置差值器
        tweenAnimImg.startAnimation(rotateAnimation1);


    } 

七.动画监听:


animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                Log.i(TAG, "动画开始时做操作: ");
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                Log.i(TAG, "动画重复时做操作: ");
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                Log.i(TAG, "动画结束时做操作: ");
            }
        });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值