• android 动画


    补间动画(Tween 动画)

    视图动画,也就是所谓的补间动画。指通过指定View的初始状态、变化时间、方式、通过一系列的算法去进行图片变换(平移、缩放、旋转、改变透明度),可以采用XML来做也可以采用编码来做。

    从而实现动画效果。主要有scale、alpha、Translate、Rotate四种效果。

    动画类型名称
    渐变透明度动画alpha(AlphaAnimation)
    渐变尺寸缩放动画scale(ScaleAnimation)
    渐变位置移动动画translate(TranslateAnimation)
    渐变旋转动画rotate(RotateAnimation)

    透明度动画 实现淡入淡出的动画效果

    • 方式一:通过代码实现
     Animation alphaAnimation = new AlphaAnimation(1, (float) 0.1);
     alphaAnimation.setDuration(2000);//设置动画持续时间为2秒
     iv.startAnimation(alphaAnimation);
    
    • 1
    • 2
    • 3
    • 方式二 通过在xml中实现
    xml 文件(alpha)
    <?xml version="1.0" encoding="utf-8"?>
    <alphaxmlns:android="https://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="2000">
    
    java 代码调用xml文件 将xml动画文件并将其设置到指定的ViewAnimation alphaAnimation=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画
    iv.startAnimation(alphaAnimation);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    旋转的动画

    • 方式一 java 代码实现
    Animation rotateAnimation=new RotateAnimation(0, 45);
    rotateAnimation.setDuration(2000);//设置动画持续时间为2秒
    iv.startAnimation(rotateAnimation)
    
    • 1
    • 2
    • 3
    • 方式二 xml 实现
    xml 文件(rotate)
    <?xml version="1.0" encoding="utf-8"?>
    <rotatexmlns:android="https://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="45"
    android:duration="2000">
    
    java 代码调用xml文件 ,将xml动画文件并将其设置到指定的ViewAnimation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);//加载Xml文件中的动画
    iv.startAnimation(rotateAnimation)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    缩放动画

    • 方式一通过java代码 实现
    Animation scaleAnimation=new ScaleAnimation(0.5f, 1.0f,1.0f, 1.0f);
    scaleAnimation.setDuration(2000);//设置动画持续时间为2秒
    scaleAnimation.setRepeatCount(2);
    iv.startAnimation(scaleAnimation);
    
    • 1
    • 2
    • 3
    • 4
    • 方式二通过在xml实现
    定义xml动画文件:scale.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <scalexmlns:android="https://schemas.android.com/apk/res/android"
    android:fromXScale="0.5"
    android:toXScale="1.0"
    android:fromYScale="1.0"
    android:toYScale="1.0"
    android:duration="2000">
    java 代码调用 加载xml动画文件并将其设置到指定的ViewAnimation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);//加载Xml文件中的动画
    iv.startAnimation(scaleAnimation)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    位移动画

    • 方式一通过java代码 实现
    Animation translateAnimation=new TranslateAnimation(0.5f, 1.0f,1.0f, 1.0f);
    translateAnimation.setDuration(2000);//设置动画持续时间为2秒
    translateAnimation.setRepeatCount(2);
    iv.startAnimation(translateAnimation);
    
    • 1
    • 2
    • 3
    • 4
    • 方式二通过在xml实现
    定义xml动画文件:translate.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <scalexmlns:android="https://schemas.android.com/apk/res/android"
    android:fromXScale="0.5"
    android:toXScale="1.0"
    android:fromYScale="1.0"
    android:toYScale="1.0"
    android:duration="2000">
    java 代码调用 加载xml动画文件并将其设置到指定的ViewAnimation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);//加载Xml文件中的动画
    iv.startAnimation(translateAnimation)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    动画集 AnimationSet实现多种动画混合效果

    定义动画集主要用到了AnimationSet类,该类可以添加多个补间动画啊。

    • 方式一通过代码
    AnimationSet animationSet=new AnimationSet(true);//定义一个动画集,并设定所有的动画使用一个动画入其
    Animation translateAnimation=AnimationUtils.loadAnimation(this, R.anim.translate);//加载Xml文件中的动画
    Animation alphaAnimation=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画
    Animation rotateAnimation=AnimationUtils.loadAnimation(this, R.anim.rotate);//加载Xml文件中的动画
    Animation scaleAnimation=AnimationUtils.loadAnimation(this, R.anim.scale);//加载Xml文件中的动画
    animationSet.addAnimation(translateAnimation);
    animationSet.addAnimation(alphaAnimation);
    animationSet.addAnimation(rotateAnimation);
    animationSet.addAnimation(scaleAnimation);
    iv.startAnimation(animationSet);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 方式二在xml文件中设置动画集合
    定义xml动画文件:animset.xml
    <?xml version="1.0" encoding="utf-8"?>
    <setxmlns:android="https://schemas.android.com/apk/res/android">
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="3000"
    android:fillAfter="true"
    android:repeatCount="2">
    android:fromDegrees="0"
    android:toDegrees="45"
    android:duration="3000"
    android:fillAfter="true">
    android:fromXScale="0.5"
    android:toXScale="1.0"
    android:fromYScale="1.0"
    android:toYScale="1.0"
    android:duration="3000"
    android:fillAfter="true">
    android:fromXDelta="0"
    android:toXDelta="260"
    android:fromYDelta="0"
    android:toYDelta="600"
    android:duration="3000"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    
    加载xml动画文件并将其设置到指定的ViewAnimationSet animationSet2=(AnimationSet) AnimationUtils.loadAnimation(this, R.anim.animset);
    iv.startAnimation(animationSet2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    帧动画(Frame)

    Frame动画,指通过指定的每一帧的图片和播放时间,有序的进行播放而形成的动画效果
    开发步骤:
    (1)把准备好的图片放进项目res/ drawable下。
    (2)在项目的drawable文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。
    (3)为View控件绑定动画效果。调用代表动画的AnimationDrawable的start()方法开始动画。

    属性动画(ObjectAnimator , ValueAnimator)

    过不断地改变View的属性,不断重绘而形成动画效果。相比较视图动画,View的属性是真正改变了
    注意:Android3.0(API 11)以上才支持。

    1. object必须要提供setXxx方法,如果动画的时候没有传递初始值,那么还要提供getXxx方法,因为系统要去拿xxx属性的初始值(如不满足,程序直接Crash)
    2. object的setXxx对属性xxx所做的改变必须能够通过某种方法反映出来,比如会带来ui的改变。

    平移动画:

    ObjectAnimator.ofFloat(view, "translationX", 0f, 200f)
                .setDuration(1000)
                .start();
    
    • 1
    • 2
    • 3

    透明度动画

     ObjectAnimator.ofFloat(view, "alpha", 1f, 0f)
                .setDuration(1000)
                .start();
    
    • 1
    • 2
    • 3

    缩放动画

    ObjectAnimator.ofFloat(view, "scaleX", 1f, 0f)
                .setDuration(1000)
                .start()
    
    • 1
    • 2
    • 3

    旋转动画

    ObjectAnimator.ofFloat(view, "rotation", 0f, 360f)
                .setDuration(1000)
                .start();
    
    • 1
    • 2
    • 3

    补间动画和属性动画主要区别

    • 对象不同,补间动画只能作用在view上,属性动画可以作用在所有对象上。
    • 属性变化不同,补间动画只是改变显示效果,不会改变view的属性,比如位置、宽高等,而属性动画实际改变对象的属性。
    • 效果不同,补间动画只能实现位移、缩放、旋转和透明度四种动画操作,而属性动画还能实现补间动画所有效果及其他更多动画效果。
  • 相关阅读:
    【Unity】按Text文本内容自适应背景大小
    关于标准帧和扩展帧的区别
    Pytorch torch.split()的简单用法
    论文阅读《ICDE2023:Relational Message Passing for Fully Inductive Knowledge Graph Completion》
    Java spring boot 全解Camunda 7,从 0 到 1 构建工作流平台——第一节:各个开源框架对比
    bp神经网络解决什么问题,bp神经网络的改进方法
    JUC并发编程第四篇,Java中的各种锁之乐观锁和悲观锁、公平锁和非公平锁、可重入锁以及死锁基础
    性能测试过程
    通过融合UGV的地图信息和IMU的惯性测量数据,实现对车辆精确位置和运动状态的估计和跟踪研究(Matlab代码实现)
    2022年Java秋招面试必看的 | ZooKeeper面试题
  • 原文地址:https://blog.csdn.net/Sh_12345/article/details/131131859