精华内容
下载资源
问答
  • 视图动画也分为 Tween(间)动画和 Frame(帧)动画。间动画 间动画就是一个 View 从开始状态到结束状态变化的过程,间动画有四种基本变化:渐变、平移、缩放、旋转,这四种基本动画效果都可以通过 ...

        Android 动画主要可以分为两种,一种就是视图动画,一种就是属性动画,这里我们先了解一下视图动画。

        而视图动画也分为 Tween(补间)动画和 Frame(帧)动画。

    • 补间动画

        补间动画就是一个 View 从开始状态到结束状态变化的过程,补间动画有四种基本变化:渐变、平移、缩放、旋转,这四种基本动画效果都可以通过 xml 和代码两种方式来实现。补间动画如果要使用 xml 方法,就需要在 res 文件目录下创建 anim文件夹,将动画的 xml 文件放在其中:


        xml 主要共有熟悉:

    属性名 说明
    android:duration="" 动画持续时间,单位:毫秒
    android:startOffset="" 动画开始时间,单位:毫秒

    • 渐变动画
    • xml 方法

        xml 方法主要属性:

    属性名 说明
    android:fromAlpha="" 动画开始时透明度,0.0 表示全透明,1.0 表示不透明
    android:toAlpha=""动画结束时透明度,0.0 表示全透明,1.0 表示不透明

        代码:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha
            android:fromAlpha="1.0"
            android:toAlpha="0.0"
            android:duration="1000"/>
    </set>
     // 通过 xml 完成渐变动画
        private void doAlphaByXML(){
            Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_tween_alpha);
            image.startAnimation(animation);
        }

    • 代码方法
    // 通过代码完成渐变动画
        private void doAlphaByCode(){
            AlphaAnimation animation = new AlphaAnimation(1.0f,0.0f);
            animation.setDuration(1000);
            image.startAnimation(animation);
        }
    • 平移动画
    • xml 方法
        xml 方法主要属性:
    属性名 说明
    android:fromXDelta=""X 轴开始地方,0表示自身 X 坐标,单位:像素
    android:fromYDelta=""Y 轴开始地方,0表示自身 Y 坐标,单位:像素
    android:toXDelta=""X 轴结束地方,0表示自身 X 坐标,单位:像素
    android:toYDelta=""Y 轴结束地方,0表示自身 Y 坐标,单位:像素

       代码:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:fromXDelta="5"
            android:toXDelta="100"
            android:fromYDelta="0"
            android:toYDelta="100"
            android:duration="1000"
            />
    </set>
    // 通过 xml 完成平移动画
        private void doTranslateByXML(){
            Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_tween_translate);
            image.startAnimation(animation);
        }
    • 代码方法
    // 通过代码完成平移动画
        private void doTranslateByCode(){
            TranslateAnimation animation = new TranslateAnimation(0,100,0,100);
            animation.setDuration(1000);
            image.startAnimation(animation);
        }
       前提说明,因为缩放动画和旋转动画的 xml 属性,以及代码方法的参数有共同之处,这里先做一个说明。
    属性名 说明
    android:pivotX="" 缩放或者旋转时的中心点的 X 坐标
    android:pivotY="" 缩放或者旋转时的中心点的 Y 坐标

    • 缩放动画
    • xml 方法
        xml 方法主要属性:
    属性名 说明
    android:fromXScale="" X 轴开始的大小,1 表示自身大小,单位:比例
    android:toXScale=""  X 轴结束的大小,1 表示自身大小,单位:比例
    android:fromYScale="" Y 轴开始的大小,1 表示自身大小,单位:比例
    android:toYScale=""  Y 轴结束的大小,1 表示自身大小,单位:比例

        代码:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale
            android:fromXScale="0.5"
            android:toXScale="2"
            android:fromYScale="0.5"
            android:toYScale="2"
            android:pivotX="0"
            android:pivotY="0"
            android:duration="1000"/>
    </set>
    // 通过 xml 完成缩放动画
        private void doScaleByXML(){
            Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_tween_scale);
            image.startAnimation(animation);
        }
    • 代码方式
    // 通过代码完成缩放动画
        private void doScaleByCode(){
            ScaleAnimation animation = new ScaleAnimation(0.5f,2,0.5f,2,0,0);
            animation.setDuration(1000);
            image.startAnimation(animation);
        }
    • 旋转动画
    • xml 方法

        xml 方法主要属性:

    属性名

     说明

    android:fromDegrees="" 动画开始的角度,单位:度(正从顺时针)
    android:toDegrees="" 动画结束的角度,单位:度(正从顺时针)
         代码:
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <rotate
            android:fromDegrees="0"
            android:toDegrees="360"
            android:duration="1000"
            android:pivotX="100%"
            android:pivotY="100%"/>
    </set>
    // 通过 xml 完成旋转动画
        private void doRotateByXML(){
            Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_tween_rotate);
            image.startAnimation(animation);
        }

        注意:android:pivotX="" 和 android:pivotY="" 有三种方式,如下(以 android:pivotX="" 举例),三种方式的坐标原点都是以自身 View 的左上角。

    方式 结果
    android:pivotX="100"(float 方式) 以像素为大小
    android:povotX="50%"(百分比方式) 以自身为大小,指占比自己大小多少
    android:prvotX="50%p"(百分比 p 方式) 以页面为大小,指占比页面多少

        这个,可能文字描述起来比较抽象,大家写一下马上就能明白

    • 代码方法
    // 通过代码完成旋转动画
        private void doRotateByCode(){
            RotateAnimation animation = new RotateAnimation(0,360,100,100);
            animation.setDuration(1000);
            image.startAnimation(animation);
        }

        注意:旋转和缩放动画使用代码方式时,其不止一个构造方法,文中,写的构造方法是没有 pivotXType 和 pivotYType 的,没有选 Type,默认为像素。

    • 组合动画

         当然,我们使用动画时,不可能只使用一种动画,我们只有组合使用,才能达到一些想要的动画效果:

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

        是时候放一波效果图了:


        大家可以看到,视图动画结束后会默认回到原来的位置,我们可以使用该函数,让其动画结束后留在原地:

            animation.setFillAfter(true);

         注意:视图动画有一个致命缺点,就是视图动画动的只是它的外表,它的坐标并没有随着外表动而动,这是什么意思呢?就是当一个视图动画结束后并且留在动画结束后的位置时,其是不能响应点击事件的,而点击动画原来的位置,却发现其响应了点击事件,大家可以试试。

        那这个问题怎么解决呢?比较暴力的方法,就是写两个 View,新的 View 放在动画结束的位置,旧的 View 在动画结束后消失,并且让其不可被点击,显示新的 View,然后响应新的 View 的点击事件。

        还有什么办法呢?就是使用 Android 3.0 后的属性动画,属性动画移动的不仅是外表,还有其属性,这个问题就可以完美解决。

         当然,动画也是有监听器的:

    animation.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                    // 动画开始时
                }
    
                @Override
                public void onAnimationEnd(Animation animation) {
                    // 动画结束时
                }
    
                @Override
                public void onAnimationRepeat(Animation animation) {
                    // 动画重复时
                }
            });

    • 帧动画

        帧动画又是什么意思呢?大家都知道电影吧,电影是可以取帧的,每一帧就是一张图片,将很多帧组合在一起就成了动画,帧动画就好比将很多张图片连续展示,组成一幅动的画:


        帧动画,现在已经很少使用了,自从 Android 3.0 的属性动画出来以后补间动画都用的少了,这里也来说一说实现补间动画的方式吧。

    • xml 方法
        xml 方法主要属性
    属性名 说明
    android:drawable="" 当前帧的图片
    android:duration="" 当前帧的播放时间,单位:毫秒

        通过 xml 实现帧动画和补间动画是不太一样的,帧动画的 xml 文件是在 drawable 目录下的,并且以 <animation-list> 为根节点。

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/frame1" android:duration="50"/>
        <item android:drawable="@drawable/frame2" android:duration="50"/>
        <item android:drawable="@drawable/frame3" android:duration="50"/>
        <item android:drawable="@drawable/frame4" android:duration="50"/>
        <item android:drawable="@drawable/frame5" android:duration="50"/>
        <item android:drawable="@drawable/frame6" android:duration="50"/>
        <item android:drawable="@drawable/frame7" android:duration="50"/>
        <item android:drawable="@drawable/frame8" android:duration="50"/>
        <item android:drawable="@drawable/frame9" android:duration="50"/>
        <item android:drawable="@drawable/frame10" android:duration="50"/>
        <item android:drawable="@drawable/frame11" android:duration="50"/>
        <item android:drawable="@drawable/frame12" android:duration="50"/>
        <item android:drawable="@drawable/frame13" android:duration="50"/>
        <item android:drawable="@drawable/frame14" android:duration="50"/>
        <item android:drawable="@drawable/frame15" android:duration="50"/>
        <item android:drawable="@drawable/frame16" android:duration="50"/>
        <item android:drawable="@drawable/frame17" android:duration="50"/>
        <item android:drawable="@drawable/frame18" android:duration="50"/>
        <item android:drawable="@drawable/frame19" android:duration="50"/>
        <item android:drawable="@drawable/frame20" android:duration="50"/>
        <item android:drawable="@drawable/frame21" android:duration="50"/>
        <item android:drawable="@drawable/frame22" android:duration="50"/>
        <item android:drawable="@drawable/frame23" android:duration="50"/>
        <item android:drawable="@drawable/frame24" android:duration="50"/>
        <item android:drawable="@drawable/frame25" android:duration="50"/>
    
    </animation-list>
    // 通过 xml 实现帧动画
        private void doFrameByXML(){
            imageView.setBackgroundResource(R.drawable.anim_frame);
            AnimationDrawable drawable = (AnimationDrawable) imageView.getBackground();
            if (!drawable.isRunning()){
                drawable.start();
            }
        }

    代码方法:

    // 通过代码实现帧动画
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
        private void doFrameByCode(){
            AnimationDrawable drawable = new AnimationDrawable();
            drawable.addFrame(getResources().getDrawable(R.drawable.frame1),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame2),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame3),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame4),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame5),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame6),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame7),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame8),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame9),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame10),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame11),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame12),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame13),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame14),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame15),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame16),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame17),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame18),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame19),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame20),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame21),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame22),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame23),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame24),50);
            drawable.addFrame(getResources().getDrawable(R.drawable.frame25),50);
            imageView.setBackground(drawable);
            // 是否只播放一次
            drawable.setOneShot(false);
            if (!drawable.isRunning()){
                drawable.start();
            }
        }

        效果图:


        大家需要注意的是,如果是自己测试做帧动画,一定要注意图片不能太大,不能过多,要不然会造成突然加载大量图片导致 OOM。

        项目地址:源代码

    展开全文
  • View animation(视图动画)视图动画分两种子动画Tween animation和Frame animation,下面分别介绍他们的用法。Tween animation(间动画)实现view的alpha(透明度)、scale(缩放)、translate(平移)、rotate(旋转)等动画...

    相关文章
    Android 动画之视图动画
    Android 动画之插值器
    Android 动画之属性动画ValueAnimator
    Android 动画之属性动画ObjectAnimator
    Android 动画之集合动画AnimatorSet
    Android 动画之布局动画

    View animation(视图动画)

    视图动画分两种子动画Tween animation和Frame animation,下面分别介绍他们的用法。


    Tween animation(补间动画)

    实现view的alpha(透明度)、scale(缩放)、translate(平移)、rotate(旋转)等动画效果。

    文件保存路径:

    res/anim/filename.xml

    语法:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@[package:]anim/interpolator_resource"
        android:shareInterpolator=["true" | "false"] >
        <alpha
            android:fromAlpha="float"
            android:toAlpha="float" />
        <scale
            android:fromXScale="float"
            android:toXScale="float"
            android:fromYScale="float"
            android:toYScale="float"
            android:pivotX="float"
            android:pivotY="float" />
        <translate
            android:fromXDelta="float"
            android:toXDelta="float"
            android:fromYDelta="float"
            android:toYDelta="float" />
        <rotate
            android:fromDegrees="float"
            android:toDegrees="float"
            android:pivotX="float"
            android:pivotY="float" />
        <set>
            ...
        </set>
    </set>

    例子:

    res/anim/set_anim.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false" >
    
        <scale
            android:duration="700"
            android:fillAfter="false"
            android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="1.4"
            android:toYScale="0.6" />
    
        <set
            android:interpolator="@android:anim/accelerate_interpolator"
            android:startOffset="700" >
            <scale
                android:duration="400"
                android:fromXScale="1.4"
                android:fromYScale="0.6"
                android:pivotX="50%"
                android:pivotY="50%"
                android:toXScale="0.0"
                android:toYScale="0.0" />
    
            <rotate
                android:duration="400"
                android:fromDegrees="0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:toDegrees="-45"
                android:toYScale="0.0" />
        </set>
    
    </set>

    res/anim/scale_anim.xml

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

    这里只列出scale的使用方法了,alpha、rotate、translate的使用是大同小异的,所以就不一一列出了。还有它们一一对应的类分别为:
    AlphaAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation、AnimationSet。

    代码中的应用:

    ImageView image = (ImageView) findViewById(R.id.image);
    Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.set_anim);
    image.startAnimation(hyperspaceJump);

    效果:

    这里写图片描述


    Frame animation(帧动画)

    顾名思义就是一张一张的播放图片,到达动画的效果。

    文件保存路径:

    res/drawable/filename.xml

    语法:

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot=["true" | "false"] >
        <item
            android:drawable="@[package:]drawable/drawable_resource_name"
            android:duration="integer" />
    </animation-list>

    例子:

    res/drawable/frame_anim.xml

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false" >
    
        <item
            android:drawable="@drawable/list_add"
            android:duration="1000"/>
        <item
            android:drawable="@drawable/list_delete"
            android:duration="1000"/>
        <item
            android:drawable="@drawable/list_sync"
            android:duration="1000"/>
    
    </animation-list>

    代码中的应用:

    view.setBackgroundResource(R.drawable.frame_anim);
    AnimationDrawable animation = (AnimationDrawable) view.getBackground();
    animation.start();

    帧动画要注意的地方就是oneshot属性了,oneshot=”true”就是只执行一遍动画,oneshot=”false”就是循环播放动画。

    效果:

    这里写图片描述


    Animation各属性的意义

    属性解释
    fromXScale动画开始时X轴的缩放比例
    toXScale动画结束时X轴的缩放比例
    fromYScale动画开始时Y轴的缩放比例
    toYScale动画结束时Y轴的缩放比例
    fromDegrees动画开始时的旋转角度,正值为顺时针,负值为逆时针
    toDegrees动画结束时的旋转角度,正值为顺时针,负值为逆时针
    fromAlpha动画开始时的透明度,0.0为全透明,1.0为完全不透明
    toAlpha动画结束时的透明度,0.0为全透明,1.0为完全不透明
    pivotX动画起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
    pivotY动画起点Y轴坐标,取值及意义跟android:pivotX一样
    fromXDelta取值及意义跟android:pivotX一样
    toXDelta取值及意义跟android:pivotX一样
    fromYDelta取值及意义跟android:pivotX一样
    toYDelta取值及意义跟android:pivotX一样
    fillAfter如果设置为true,控件动画结束时,将保持动画最后时的状态
    fillBefore如果设置为true,控件动画结束时,还原到开始动画前的状态
    fillEnabled与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
    repeatCount重复次数,如果为infinite或者-1就表示无限循环
    repeatMode重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
    startOffset延时多少毫秒后,开始播放动画
    interpolator插值器,影响的动画的执行效果
    detachWallpaper是否在壁纸上运行
    duration动画持续时间
    zAdjustment表示被设置动画的内容运行时在Z轴上的位置(top/bottom/normal),默认为normal

    这里需要特别注意的就是pivotX、pivotY、fromXDelta、toXDelta、fromYDelta、toYDelta这六种属性了,知道了它们的意义后,我们就不再会被50,50%,50%p这样的值疑惑了。interpolator这个属性,将用一个新的文章,专门来讲解。

    源代码


    参考文章

    Animation Resources
    自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法
    自定义控件三部曲之动画篇(二)——Interpolator插值器
    自定义控件三部曲之动画篇(三)—— 代码生成alpha、scale、translate、rotate、set及插值器动画

    展开全文
  • Android动画可以分为视图动画和属性动画,视图动画又可以分为间动画和帧动画,分类图如下: 今天就来先总结一下视图动画。 视图动画出现于Android1.0时代,顾名思义,它主要作用于视图View,可以细分为间...

    Android动画可以分为视图动画和属性动画,视图动画又可以分为补间动画和帧动画,分类图如下:

    今天就来先总结一下视图动画。

    视图动画出现于Android1.0时代,顾名思义,它主要作用于视图View,可以细分为补间动画和帧动画;

    补间动画:

    一、概念

    1、动画开始的样式(位置、状态等)与动画结束的样式(位置、状态等)是由开发者设置的,而变化过程由系统来补全;

    2、补间动画可以实现View的平移、翻转、缩放以及透明度等变化;

    3、支持java和xml两种方式进行设置;

    4、后执行的动画会把前面的动画替代;

    5、使用animationSet进行组合动画时,所有的动画效果会同时执行,无法为其设置前后顺序;

    6、补间动画的效果只是视觉上的改变,并没有真正改变View的属性,并且在动画执行过程中,View是无法在动画路径上完成点击等相关操作的;

    二、动画分类

    三、具体应用

    1、5种变换都继承于Animation,因此有一些公用的方法,下面列举一些常用的属性及对应的方法:

    2、平移变换

    2.1、构造函数

    2.1.1、public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

    2.1.2、public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,int fromYType, float fromYValue, int toYType, float toYValue) 

    2.2 代码实现

    2.2.1、纯java实现:

    translateAnimation = new TranslateAnimation(0,100,0,100);
    translateAnimation.setDuration(3000);
    translateAnimation.start();

    2.2.2、XML配置:

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="5000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="150"
        android:toYDelta="150"
        />
    Animation animation = AnimationUtils.loadAnimation(context, R.anim.translate_anim);
    tvAnim.startAnimation(animation);

    2.3、效果展示:

    3、缩放动画

    3.1、构造函数

    3.1.1、public ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY) 

    3.1.2、public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

    3.2、代码实现:

    3.2.1、纯Java实现:

     ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f,1.5f,1.0f,1.5f,
                    Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
     scaleAnimation.setDuration(3000);
     scaleAnimation.start();
    

    3.2.2、XML实现:

    <?xml version="1.0" encoding="utf-8"?>
    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="0%"
        android:pivotY="0%"
        android:toXScale="1.5"
        android:toYScale="1.5"/>
    Animation animation = AnimationUtils.loadAnimation(context, R.anim.scale_anim);
    tvAnim.startAnimation(animation);

    3.3、动画展示

    4、翻转动画

    4.1、构造函数

    4.1.1、public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)

    4.1.2、public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,int pivotYType, float pivotYValue)

    4.2、代码实现

    4.2.1、纯Java实现:

    rotateAnimation = new RotateAnimation(0,90,Animation.RELATIVE_TO_SELF,
                    0.5f,Animation.RELATIVE_TO_SELF,0.5f);
    rotateAnimation.setDuration(3000);
    rotateAnimation.start();

    4.2.2、XML配置:

    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:toDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="3000"
        />
    animation = AnimationUtils.loadAnimation(context, R.anim.rotate_anim);
    tvAnim.startAnimation(animation);

    4.3、动画展示:

    5、透明度动画

    5.1、构造函数

    5.1.1、public AlphaAnimation(float fromAlpha, float toAlpha)

    5.2、代码实现

    5.2.1、纯Java实现:

     alphaAnimation = new AlphaAnimation(1.0f,0.2f);
     alphaAnimation.setDuration(3000);
     alphaAnimation.start();
    

    5.2.2、XML配置

    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromAlpha="1"
        android:toAlpha="0.2"
        android:duration="3000"
        >
    </alpha>
     animation = AnimationUtils.loadAnimation(context, R.anim.alpha_anim);
     tvAnim.startAnimation(animation);

    5.3、动画展示:

    6、组合动画

    组合动画就是将以上的动画方式结合起来,形成一个组合的动画效果;

    6.1、代码实现

    6.1.1、纯Java实现:

    
    //实例化AnimationSet,参数为shareInterpolator,如果为true,组合中的动画将公用AnimationSet的插值器,否则则使用每个动画本身的插值器;
    animationSet = new AnimationSet(true);
    animationSet.addAnimation(scaleAnimation);
    animationSet.addAnimation(rotateAnimation);
    animationSet.setDuration(10000);
    tvAnim.startAnimation(animationSet);

    6.1.2、XML配置

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <rotate
            android:fromDegrees="0"
            android:toDegrees="90"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="3000"
            />
    
        <scale
            android:duration="3000"
            android:fromXScale="1"
            android:fromYScale="1"
            android:pivotX="0%"
            android:pivotY="0%"
            android:toXScale="1.5"
            android:toYScale="1.5"/>
    </set>
     animation = AnimationUtils.loadAnimation(context,R.anim.anim_set);
     tvAnim.startAnimation(animationSet);

    6.2、效果展示:

    展开全文
  • Android视图动画之间动画知识梳理

    千次阅读 2018-12-20 12:55:18
    Android系统中的动画分类:视图动画(View Animation)和属性动画(Property Animation)视图动画可分为:间动画(Tween Animation)和逐帧动画(Frame Animation)间动画又可分为以下: Alpha Animation:透明度动画 ...
    一、Android动画整体分类

    Android系统中的动画分类:视图动画(View Animation)和属性动画(Property Animation)视图动画可分为:补间动画(Tween Animation)和逐帧动画(Frame Animation)补间动画又可分为以下:

    • Alpha Animation:透明度动画
    • Scale Animation:缩放动画
    • Translate Animation:平移动画
    • Rotate Animation:旋转动画

    这四种动画接下来会一一详解

    二、ScaleAnimation

    1.首先在res/anim下创建一个scale_animation.xml文件
    在这里插入图片描述
    xml代码如下:

    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000"
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="0"
        android:pivotY="0"
        android:toXScale="1.5"
        android:toYScale="1.5" />
    

    2.在Activity中使用,布局很简单一个Button和一个TextView

     Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale_animation);
     mTvShowAnimation.setAnimation(animation);
    

    效果如下:
    在这里插入图片描述

    • android:fromXScale:动画开始时,控件在水平方向(X轴)相对于自己的缩放比例,浮点值。
    • android:fromYScale:动画开始时,控件在垂直方向(Y轴)相对于自己的缩放比例,浮点值。
    • android:toXScale:动画结束时,控件在水平方向(X轴)相对于自己的缩放比例,浮点值。
    • android:toYScale:动画结束时,控件在垂直方向(Y轴)相对于自己的缩放比例,浮点值。
    • android:pivotX:缩放中心点X轴坐标,通俗点讲就是根据某点在放大或缩小,它的值有三种方式分别是,数值,百分数,百分数p,例如50,50%,50%p。
    • android:pivotY:缩放中心点Y轴坐标,其它同上。

    默认情况下坐标原点位于控件的左上角的位置,向右(X轴正方向)向下(Y轴正方向)
    50:表示在当前控件的左上角,即原点处X轴、Y轴分别加上50px,作为缩放点的坐标;
    50%:表示在当前控件的左上角,即原点处X轴、Y轴分别加上控件自身width和height的50%,作为缩放点的坐标;
    50%p:表示在当前控件的左上角,即原点处X轴、Y轴分别加上父控件width和height的50%,作为缩放点的坐标;

    由上面的动画,当缩放点设置在(0,0)时,可以看出在控件的左上角(原点处)向右(X轴正方向)向下(Y轴正方向)分别放大原图形的1.5倍,当然你也可以设置pivotX和pivotY均为50%,我们此时可以将TextView想象成一个矩形,那么缩放点就在该矩形的几何中心,自己可以实现体会一下。


    3.以上内容是利用xml方式来创建动画,接下来利用代码来动态创建动画

    首先来看一下ScaleAnimation类的构造函数如下:

    1.public ScaleAnimation(Context context, AttributeSet attrs)
    2.public ScaleAnimation(float fromX, float toX, float fromY, float toY)
    3.public ScaleAnimation(float fromX, float toX, float fromY, float toY,float pivotX, float pivotY)
    4.public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
    

    在代码中构建ScaleAnimation动画会用到下面3个构造函数:
    第2个构造函数源码如下:

    public ScaleAnimation(float fromX, float toX, float fromY, float toY) {
            mResources = null;
            mFromX = fromX;
            mToX = toX;
            mFromY = fromY;
            mToY = toY;
            mPivotX = 0;
            mPivotY = 0;
        }
    

    可以看出,缩放点是默认的原点(控件左上角)

    第3个构造函数源码如下:

    public ScaleAnimation(float fromX, float toX, float fromY, float toY,
                float pivotX, float pivotY) {
            mResources = null;
            mFromX = fromX;
            mToX = toX;
            mFromY = fromY;
            mToY = toY;
            mPivotXType = ABSOLUTE;
            mPivotYType = ABSOLUTE; 
            mPivotXValue = pivotX;
            mPivotYValue = pivotY;
            initializePivotPoint();
        }
    

    从上面可以看到
    mPivotXType = ABSOLUTE
    mPivotYType = ABSOLUTE
    这又是个什么鬼?(黑人问号脸^_ ^)先不做解释,下面再说。

    第4个构造函数源码如下:

       /**
         * @param pivotXType Specifies how pivotXValue should be interpreted. One of
         *        Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or
         *        Animation.RELATIVE_TO_PARENT.
         * @param pivotYType Specifies how pivotYValue should be interpreted. One of
         *        Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or
         *        Animation.RELATIVE_TO_PARENT.
         */
        public ScaleAnimation(float fromX, float toX, float fromY, float toY,
                int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) {
            mResources = null;
            mFromX = fromX;
            mToX = toX;
            mFromY = fromY;
            mToY = toY;
    
            mPivotXValue = pivotXValue;
            mPivotXType = pivotXType;
            mPivotYValue = pivotYValue;
            mPivotYType = pivotYType;
            initializePivotPoint();
        }
    

    源码中给出的解释
    pivotXType和pivotYType其中的Type类型均有3中,分别如下:
    Animation.ABSOLUTE:对应于上面xml中的50
    Animation.RELATIVE_TO_SELF:对应于上面xml中的50%
    Animation.RELATIVE_TO_PARENT:对应于上面xml中的50%p
    现在再来解释第3中构造函数中的问题,很明显,第三中构造函数是默认此种Type类型,即:Animation.ABSOLUTE。而第4中构造函数更加灵活可以随意指定类型。

    介绍完构造函数后,那么可以直接在Activity中利用代码的方式去构建动画啦

    //这里利用第4种构造方法来创建动画
    ScaleAnimation animation = new ScaleAnimation(1f, 1.5f, 1f, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                    animation.setDuration(3000);
                    mTvShowAnimation.setAnimation(animation);
    

    设置中心点分别为自身width和height的50%处即为下图红点处

    在这里插入图片描述

    运行效果如下:

    在这里插入图片描述

    三、AlphaAnimation

    1.xml代码如下:

    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000"
        android:fromAlpha="1"
        android:toAlpha="0.2" />
    

    2.在Activity中使用,布局很简单还是一个Button和一个TextView

     Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha_animation);
     mTvShowAnimation.setAnimation(animation);
    

    运行效果如下:
    在这里插入图片描述

    • android:fromAlpha:动画开始时,控件的透明度。
    • android:toAlpha:动画结束时,控件的透明度。

    3.以上内容是利用xml方式来创建动画,接下来利用代码来动态创建动画

    首先来看一下ScaleAnimation类的构造函数如下:

    1.public AlphaAnimation(Context context, AttributeSet attrs)
    2.public AlphaAnimation(float fromAlpha, float toAlpha)
    

    在这里,我们只利用第2个构造函数来创建动画

     AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0.2f);
     alphaAnimation.setDuration(3000);
     mTvShowAnimation.setAnimation(alphaAnimation);
    

    由于Alpha Animation相对比较简单,这里就不过多阐述。

    四、TranslateAnimation

    1.xml代码如下:

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="2000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="150"
        android:toYDelta="150" />
    

    2.在Activity中使用,布局很简单还是一个Button和一个TextView

    Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate_animation);
    mTvShowAnimation.setAnimation(animation);
    

    运行效果如下:
    在这里插入图片描述

    • android:fromXDelta:动画开始时,空间在X轴的水平偏移量。
    • android:fromYDelta:动画开始时,空间在Y轴的水平偏移量。
    • android:toXDelta:动画结束时,空间在X轴的水平偏移量。
    • android:toYDelta:动画结束时,空间在Y轴的水平偏移量。

    这里需要注意的是:这个与上面介绍Scale Animation动画时一样有三种类型的值,分别是数值、百分数、百分数p。道理都是相同的,这里也就不赘述了。


    3.以上内容是利用xml方式来创建动画,接下来利用代码来动态创建动画

    首先来看一下TranslateAnimation类的构造函数如下:

    1.public TranslateAnimation(Context context, AttributeSet attrs)
    2.public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
    3.TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,int fromYType, float fromYValue, int toYType, float toYValue)
    

    在这里,第2个构造函数默认Type类型是Animation.ABSOLUTE对应的是数值类型,我们可以利用第3个构造函数来设置四个不同的Type。

     TranslateAnimation alphaAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF, 1f);
     alphaAnimation.setDuration(3000);
     mTvShowAnimation.setAnimation(alphaAnimation);
    

    细节分析,以上代码创建出来的TranslateAnimation动画效果应该是:
    1.在动画开始的时候,控件的左上角(即原点)瞬间移动到,该控件的中心位置(将该TextView看成是一个矩形,这个中心位置指的就是该矩形的两条对角线的交点处)
    2.然后在平移到该控件原始位置处(第1步之前的位置)右下角的位置。

    在这里插入图片描述

    五、RotateAnimation

    1.xml代码如下:

    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="720" />
    

    2.在Activity中使用,布局很简单还是一个Button和一个TextView

    Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate_animation);
    mTvShowAnimation.setAnimation(animation);
    

    运行效果如下:
    在这里插入图片描述

    • android:fromDegrees:动画开始时,起始角度,默认X轴正方向为0度。
    • android:toDegrees:动画结束时,截止角度,默认X轴正方向为0度。
    • android:pivotX:原理同上
    • android:pivotY:原理同上

    正数、负数分别对应顺时针方向、逆时针方向

    在这里插入图片描述在这里插入图片描述


    3.以上内容是利用xml方式来创建动画,接下来利用代码来动态创建动画

    首先来看一下TranslateAnimation类的构造函数如下:

    1.public RotateAnimation(Context context, AttributeSet attrs)
    2.public RotateAnimation(float fromDegrees, float toDegrees)
    3.public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
    4.public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
    

    在这里,第2个构造函数默然的旋转点为控件的左上角,第3个构造函数默认Type类型是Animation.ABSOLUTE对应的是数值类型,我们可以利用第4个构造函数来设置不同的Type。

    RotateAnimation rotateAnimation = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnimation.setDuration(3000);
    mTvShowAnimation.setAnimation(rotateAnimation);
    

    与上面在xml中创建的动画同效

    到此已经对补间动画有了一个初步的了解,那么我们回过头再来看看上面的动画效果,比如透明动画在结束之后,又回到了最初的起点也就是透明度为1时的样子,还有平移动画也是在动画完成后回到了最初的位置,假设我们有一个这样的需求,当我们点击某一个View,我们希望它可以淡去直至消失,该怎么解决?这就需要用到我们Animation这个类中的属性,我们可以从源码中了解到以上的动画都是继承于Animation类,而我们上面介绍的也都是四种动画的私有属性,那么现在就来看一下Animation类中,也就是上面四种动画的公共属性。

    android:duration:动画时长
    android:fillAfter:为true,则控件动画结束时,保持结束时的状态。
    android:fillBefore:为true,则控件动画结束时,将还原到初始化状态。
    android:fillEnabled:有待斟酌,会第一时间补上该属性与上面两个属性的本质区别。
    android:repeatCount:指定动画重复次数,取值infinite时,表示无限循环。
    android:repeatMode:用于设定重复类型,有reverse和restart两个值。其中reverse:表示倒序回放;restart表示重放,并且必须与repeatCount一起使用才有效果。
    android:interpolator:设定插值器,其实就是指定的动画效果,比如弹跳效果。

    六、AnimationSet

    1.xml代码如下:

    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000">
        
       <translate
            android:fromXDelta="0"
            android:fromYDelta="0"
            android:toXDelta="100%"
            android:toYDelta="100%" />
    
        <alpha
            android:fromAlpha="1"
            android:toAlpha="0.2"/>
    </set>
    

    2.在Activity中使用,布局很简单还是一个Button和一个TextView

    Animation animation = AnimationUtils.loadAnimation(this, R.anim.set_animation);
    mTvShowAnimation.setAnimation(animation);
    

    运行效果如下:
    在这里插入图片描述


    3.以上内容是利用xml方式来创建动画,接下来利用代码来动态创建动画

    AnimationSet animationSet = new AnimationSet(true);
    TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.ABSOLUTE, 0, Animation.RELATIVE_TO_SELF, 0.5f);
    AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0.2f);
    animationSet.addAnimation(translateAnimation);
    animationSet.addAnimation(alphaAnimation);
    animationSet.setDuration(3000);
    mTvShowAnimation.setAnimation(animationSet);
    

    效果与上述效果完全一致,这里就不附图了,由于AnimationSet也是继承于Animation类,所以AnimationSet也具有Animation的所有属性。构建AnimationSet构造函数传的true或false代表AnimationSet中包含的动画是否共用插值器。

    七、动画监听器AnimationListener

    Animation动画监听器是用来动画执行过程的三个状态,开始、结束、重复。

    RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                    rotateAnimation.setDuration(3000);
                    rotateAnimation.setRepeatMode(Animation.RESTART);
                    rotateAnimation.setRepeatCount(5);
                    rotateAnimation.setAnimationListener(new Animation.AnimationListener() {
                        @Override
                        public void onAnimationStart(Animation animation) {
                            Log.e("kpkpkp", "onAnimationStart");
                        }
    
                        @Override
                        public void onAnimationEnd(Animation animation) {
                            Log.e("kpkpkp", "onAnimationEnd");
                        }
    
                        @Override
                        public void onAnimationRepeat(Animation animation) {
                            Log.e("kpkpkp", "onAnimationRepeat");
                        }
                    });
                    mTvShowAnimation.setAnimation(rotateAnimation);
    

    动画还是引用了上面的动画,只是里面加了两个属性setRepeatMode和setRepeatCount,执行动画,观察日志。
    在这里插入图片描述

    一般情况下,可以利用监听函数来处理一些业务逻辑,比如动画结束页面跳转等。

    八、插值器Interpolator

    插值器Interpolator作为一个接口,是用来设置属性值从初始值过渡到结束值的变化规律。系统内置插值器类型如下:
    在这里插入图片描述

    注意:系统默认的是匀速的插值器

    在xml里面设置插值器:

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="3000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="100%"
        android:toYDelta="100%"
        android:interpolator="@android:anim/accelerate_interpolator"/>
    

    在java代码中动态设置

    rotateAnimation.setInterpolator(new BounceInterpolator());
    

    关于视图动画暂且先介绍到这里,对于逐帧动画,后续补上,仅仅也是作为一个记录知识,整理知识,也都是个人的理解,因此如果有什么不对的地方欢迎指正,我会及时改正。

    展开全文
  • Android动画主要有大类: View Animation: 视图动画在古老的Android版本系统中就已经提供了,只能被用来设置View的动画。 Drawable Animation: Frame动画、帧动画,其实可以划分到视图动画的...
  • Android种动画介绍与属性动画的基本使用Android动画基本可以分为类: View Animation(视图动画)、Property Animation:(属性动画)和Drawable Animation(帧动画)。其中视图动画早在Android老版本就已经...
  • // 代码实现视图动画(视图动画不建议使用代码编写,动画重用性不高,实用性低) findViewById(R.id.btn111).setOnClickListener( new View.OnClickListener() { @Override public void onClick (View v) ...
  • Android系统中的动画主要可分为类 1.帧动画 (传送门) 2.间动画(传送门) 3.属性动画(传送门) 注:下图来源其他博主,仅此一张 间动画: Tween(间)动画 ,可以在一个视图容器内执行一系列简单...
  • 项目中好久没用过动画了,所以关于动画的知识都忘光了。知识总是不用则忘。正好最近的版本要添加比较...View animation:视图动画,也叫做 Tween(间)动画。 Drawable animation:也叫做Frame 动画,帧动画。 Property
  • Android属性动画和视图动画的区别

    千次阅读 2017-04-16 11:36:53
    [Android动画之间动画TweenAnimation][Android动画之逐帧动画FrameAnimation][Android动画之插值器简介和系统默认插值器][Android动画之插值器Interpolator自定义][Android动画之视图动画的缺点和属性动画的引入]...
  • 视图动画你可以在View控件上使用视图动画实现间动画。间动画通过使用诸如起点,终点,大小,旋转角度来运行动画。间动画可以让View对象中的内容实现一系列简单的变换(变换位置、大小、旋转角度和透明度)。...
  • Android提供种形式动画:视图动画,帧动画,属性动画。其中属性动画的功能最强大,在Android 3.0中开始引入。本文介绍视图动画和帧动画的使用技巧。 1 视图动画(View Animation) Android的视图动画可以完成一...
  • 自定义控件——视图动画

    千次阅读 2020-02-27 14:12:19
    Android中的动画主要分为两大类,视图动画和属性动画。我相信这在我们参加面试的...视图动画又可分为两个分支:间动画、逐帧动画 一、间动画 根据不同的动画效果,间动画又分为4种动画: 平移动画(Tr...
  • 视图动画在API Level 1就已经引入了,ViewAnimation包含间动画和逐帧动画. Tween Animation(间动画)中只要的5个标签为 alpha(渐变透度动画效果), scale(放大缩小效果), translate(移动效果), rotate(旋转效果), ...
  • Android动画之View animation(视图动画)

    千次阅读 2017-08-14 19:42:18
    视图动画,通多对整个视图不断做图像的变换(平移、缩放、旋转、透明度)产生的动画效果,是一种渐进式动画。 Drawable Animation 图片动画,其实也是逐帧动画,是通过一个接一个的加载Drawable资源来创建动画,按...
  • Android动画学习()之间动画常用的实例本篇主要介绍间动画几个使用的功能 App欢迎界面的动画跳转 输入框EditText没有输入的水平晃动动画 仿360雷达扫描旋转动画 App欢迎界面的透明度动画实现效果 App启动时...
  • Android提供了种动画系统: Property Animation: 属性动画,3.0引入,比较灵活,能够作用于所有对象 View Animation:视图动画,只能作用于view对象,使用比较简单。 Drawable Animation:帧动画,通过...
  • 有几天没有更新博客了,今天回来... 1:间动画 ,主要对view提供透明度渐变(AlphAnimation),旋转(RotatAnimation),平移(TranslateAnimation),放大缩小(ScaleAnimation)等视图变化,它的优点是效率且方便,
  • 视图动画包含旋转、缩放、移动、透明度动画效果,但只适用于View;SVG矢量动画被引入与Android5.0,通过SVG可以创建更加丰富的动画效果。除了单独的给view增加旋转、移动、缩放、淡出淡入动画,Android还提供了标签...
  • Android 动画系列之自定义间动画

    千次阅读 2016-06-05 20:41:02
    在上一篇中写到了Android提供了Animation类作为间动画的抽象基类,并提供了四个子类:ScaleAnimation 、TranslateAnimation、AlphaAnimation、RotateAnimation分别实现了四种基本动画形式:缩放改变、位置改变、...
  • 一个视图可以混合多种动画类型形成新的混合效果,使用AnimationSet类实现,与单个动画不同的是,AnimationSet()的参数要指定是否共用动画间,动画间是指一个动画在执行过程的属性,比如匀速执行或者加速执行,...
  • [b][size=large]本文围绕以下四个部分展开: [/size][/b] [b][size=large]一、概念[/size][/b] ...[b][size=large]、创建的方式[/size][/b] [b][size=large]案例一[/size][/b] [b][size=lar...
  • 概要翻译一下就是:视图动画可以作用在View上使之执行一系列诸如:平移、旋转、缩放和透明度变化的间动画,因此视图动画也叫间动画。视图动画可以通过XML和Android Code两种方式进行定义,推荐使用XML的方式来...
  •  Android提供了Animation作为间动画抽象基类,并且为该抽象基类提供了AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation四个实现类,这四个实现类只是间动画的四种基本形式:透明度改变、...
  • Android系统提供了两种动画框架:property动画(属性动画)和View动画(视图动画)。这两个动画系统都是可行的方案,但在一般情况下,属性动画系统被优先使用,因为它更灵活,并且提供了更多的功能,除了两个动画系统...
  • 动画效果监听,如果想在动画的执行过程,做一些其它事情可以实现动画的setAnimationListener事件监听器,在事件监听器里面有个方法: //透明效果动画 AlphaAnimation alpha=new AlphaAnimation(0,1); ...
  • 1. 间动画(Tween动画)  完成视图简单的变化,比如放大,缩小,旋转,透明度的渐变等等。 2.帧动画(Frame动画)  帧动画是在短时间内连续显示一系列图像的过程,其显示效果是一个移动或者变化的对象。 ...
  • Android动画主要分为类,帧动画、间动画和属性动画 本篇博客一起来看间动画 一、什么是间动画 间动画通过确定开始的视图样式和结束的视图样式,在状态转移的过程中,系统做了一个补全的动画。 二...
  • 今天花了一天时间学习了Android动画的一种——View Animation(视图动画),好记性不如烂笔头,赶紧写篇博客记录下吧!知识点新鲜出炉,欢迎大家交流研讨! 本篇博客除了简单介绍Android动画知识外,会通过示例代码...
  • Unity Mecanim动画的实现(八):Animation视图目录 第一部分:Animation视图的基本操作 ... 除了通过维建模软件制作动画剪辑之外,Unity提供了Animation视图来为模型制作动画,制作动画的方式与3D Max、Maya类似

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,218
精华内容 4,087
关键字:

如何补画三视图