Android中的动画

59 阅读3分钟

Android中的动画

动画 介绍

动画分为两类:
    1.传统动画
        * 帧动画:Frame Animation
        * 补间动画:Tweened Animation
    2.属性动画 ViewPropertyAnimator


动画种类
    1.帧动画 Frame Animation
    2.补间动画 Tweened Animation
    3.属性动画 ViewPropertyAnimator 和 ObjectAnimator
    
三种动画的区别?



动画也可以分为这两类:
    * Animation 动画(单纯的动画)
        * View Animation// 视图动画,纯粹基于 framework 的绘制转变,比较简单
            * 帧动画 Frame Animation
            * 补间动画 Tweened Animation
            
        * Property Animation// 属性动画,Android 3.0 的动画形式,
        
    * Transition 过度动画(切换界面时的动画效果,它的重点是在于切换而不是动画)

知识拓展

属性动画 看这里:https://juejin.cn/post/7218080360402812988

Android3.0(api11)时代诞生的那些用来做动画的方法

View类在Android3.0(api11)时代诞生的那些用来做动画的方法

    setTranslationX();// 设置X轴的偏移
    setTranslationY();// 设置Y轴的偏移
    setTranslationZ();// 设置Z轴的偏移
    setX();// 设置X轴绝对位置
    setY();// 设置Y轴绝对位置
    setZ();// 设置Z轴绝对位置
    setRotation(); // 设置平面旋转
    setRotationX();// 设置沿X轴旋转
    setRotationY();// 设置沿Y轴旋转
    setScaleX();// 设置横向缩放
    setScaleY();// 设置纵向缩放
    setAlpha(); // 设置透明度
    
    注意:view的位置变了,点击事件的位置也变了。









View 提供的animate()方法获取 ViewPropertyAnimator 对象,
ViewPropertyAnimator 对象提供的动画方法如下:

    view.animate().translationX(100);// 设置X轴的偏移
    view.animate().translationY(100);// 设置Y轴的偏移
    view.animate().translationZ(100);// 设置Z轴的偏移
    view.animate().rotation(100); // 设置平面旋转
    view.animate().rotationX(100);// 设置沿X轴旋转
    view.animate().rotationY(100);// 设置沿Y轴旋转
    view.animate().scaleX(100);// 设置横向缩放
    view.animate().scaleY(100);// 设置纵向缩放
    view.animate().alpha(1);   // 设置透明度

    view.animate().setInterpolator(new LinearInterpolator());// 设置速度模型
    view.animate().setDuration(500);// 设置动画时间


链式调用:
    mImageView.animate()
        .translationX(100)// 设置X轴的偏移
        .translationY(100)// 设置Y轴的偏移
        .translationZ(100)// 设置Z轴的偏移
        .rotation(100) // 设置平面旋转
        .rotationX(100)// 设置沿X轴旋转
        .rotationY(100)// 设置沿Y轴旋转
        .scaleX(100)// 设置横向缩放
        .scaleY(100)// 设置纵向缩放
        .alpha(1)   // 设置透明度
        .setInterpolator(new LinearInterpolator())// 设置速度模型
        .setDuration(500);// 设置动画时间


    注意:view的位置变了,点击事件的位置也变了。
    
    速度模型:Interpolator 插值器/内插器
        概念:根据时间完成度去计算动画完成度;
        理解:从A点到B点,是匀速过去的还是加速过去的,过去的过程;
        方法:.setInterpolator(new LinearInterpolator())// 设置速度模型
        系统提供的速度模型:
            * LinearInterpolator();// 线性速度模型(匀速)
            * // 减速模型
            * new AccelerateDecelerateInterpolator();// 先加速再减速模型

动画 代码演示


属性动画的使用方法1:
    正常情况下,我们需要一个view向右移动400像素,会调用以下代码:
    ivImg.animate().translationX(400);// 每个10毫秒会调用一下translationX,向左移动400像素。
    view通过调用animate()方法获得一个 ViewPropertyAnimator 对象;
    在调用 ViewPropertyAnimator 对象的translationX()方法向右移动400像素;
        * ivImg.animate();// 返回了一个 ViewPropertyAnimator 对象(View类中维护了一个 ViewPropertyAnimator 对象,如果为空,就new一个返回给view,如果不为空,直接返回给view);
        * translationX(400);//