Android中的常用的动画类型及其本质的区别

Android 中的动画 Animation

一, 概要
android3.0之前 执行两种动画, 帧动画 和 补间动画

android3.0之后 引入了一个新的动画: 属性动画

二,分类

帧动画 Frame

补间动画 Tween

    透明度补间动画  

    缩放补间动画

    旋转补间动画

    移动补间动画

属性动画 Property

三, 帧动画 Frame Drawable Animation <一组图片> GIF文件

每一张静止的图片显示出来, 利用人眼睛的错觉, 得出的动画


创建方式

    1, 资源文件创建方式

        1.1 在res中创建drawable文件夹

        1.2 创建动画的文件 ***.xml 标签:  

        1.3 在代码中或者在布局页面中, 设置ImageView的背景动画资源  android:background=""

        1.4 获得AnimationDrawable动画管理器, 调用start() 开始播放动画, 调用stop()停止播放



    2, java代码创建方式

        2.1 在代码中获得AnimationDrawable动画管理器

        2.2 向动画管理器中添加动画

        2.3 为图片设置动画

        2.4 调用AnimationDrawable中start() 开始播放动画, 调用stop() 停止播放



    3, 设置动画播放的次数
        //if true: 执行一次  , if false: 重复执行
       drawable.setOneShot(false);

四, 补间动画

 补充中间的动画

 开发者只需要设置开始和结束的动画, 中间的动画是由系统计算补齐

 主要分为:  透明度/ 缩放/ 旋转/ 平移 / set(集合)

 创建方式:  

1, 资源文件中

    存放的目录:  res/anim/

       透明度

       缩放

      旋转

       平移

         组合动画

       步骤:
         在res/anim/ 创建xml的资源文件

         在java代码中 startAnimation(AnimationUtils.londAnimation(上下文对象,anim的资源文件id));


2, java代码中


       2.1  得到Animation对象

       2.2  为控件启动动画

五, 为Activity的切换添加动画

//为Activity添加动画
/**
 * enterAnim    进入的动画
 * exitAnim 出去的动画
 */
overridePendingTransition(R.anim.anim01, R.anim.anim02);

六, 属性动画 Property 3.0后出现 增强版补间动画

存放的文件夹:  res/animator/***.xml

属性动画和补间动画区别

    1, 补间动画可以设置4个方向的动画,  属性动画指定任意动画

    2, 补间动画是针对UI控件执行的动画, 属性动画是针对对象进行的动画

    3, 补间动画移动后, 控件的实际位置没有变化 ;  属性动画会随着位置的变化而变化


属性名称:

    位移:  translationX  translationY

    旋转:  rotation  rotationX  ratationY

    缩放:  scaleX   scaleY

    透明度: alpha

创建方式

    1, xml的方式

        1.1 res中创建文件夹 animator, 并且在文件夹中创建.xml的文件  

        1.2 在代码中加载资源文件中的动画

        ObjectAnimator animator = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.anim_scalex);


        1.3 设置要执行该动画的对象

        animator.setTarget(iv);


        1.4 启动动画

        animator.start();

    2, 代码的方式

        单个动画:

        ObjectAnimator animator = ObjectAnoimator.ofFloat(目标对象,属性名称,可变参数的值);

        animator.start();


         集合:

        AnimatorSet set = new AnimatorSet();

        //定义每个动画
        ObjectAnimator animator1 = ObjectAnoimator.ofFloat(目标对象,属性名称,可变参数的值);

        ObjectAnimator animator2 = ObjectAnoimator.ofFloat(目标对象,属性名称,可变参数的值);


        List list = new ArrayList();
        list.add(animator1);
        list.add(animator2);

        //把动画添加到集合中
        set.playSequentially(list);//依次执行
        //set.playTogether(list);//一起执行

        //第二种方式
        //set.play(animator1).with(animator2);  一起执行
        //play()   with()  after()  before() 

        set.start();


        监听器:

    alphaAnimator.addListener(new AnimatorListener() {

            @Override
            public void onAnimationStart(Animator animation) {
                // TODO 动画开始时, 执行

            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                // TODO 动画重复的时候, 执行

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                // TODO 动画结束时,执行

            }

            @Override
            public void onAnimationCancel(Animator animation) {
                // TODO 动画取消时执行

            }
        });

你可能感兴趣的:(安卓开发)