android 帧动画,补间动画,属性动画的简单总结

转载 2017年01月03日 14:14:58
帧动画——FrameAnimation
  将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用
  在Drawable文件夹下,创建animation-list为根节点的资源文件
<animation-list android:oneshot="false">
    <item android:drawable="@drawable/img1" android:duration="100"/>
    <item android:drawable="@drawable/img2" android:duration="100"/>
    <item android:drawable="@drawable/img3" android:duration="100"/>
    <item android:drawable="@drawable/img4" android:duration="100"/>
</animation-list>

oneshot:是否只播放一次      

  drawable:一帧引用的图片
  duration:一帧播放的时间
播放动画
  将动画作为控件的背景
  ((AnimationDrawable)view.getBackground()).start();
 
Animation常用属性
  duration:动画时间                   
  repeatCount:重复次数 infinite无限次
  fillAfter:是否停止在最后一帧
  repeatMode:重复模式     值:restart重新开始,reserve反复
  startOffset:开始延迟时间
 
补间动画 Tween Animation
  只能应用于View对象,只支持部分属性,View animation值改变了View绘制的位置,并没有改变对象本身的真实位置
  可以使用XML定义也可以使用代码定义     XML定义的动画放在/res/anim/文件夹内
 
  开始动画 通过view的startAnimation(Animation a)  参数定义的动画
 
四种补间动画通过XML定义
  AlphaAnimation:透明度动画
<?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">
    <!--
    fromAlpha 起始透明度 0为完全透明 1为不透明 0~1之间的浮点值
    toAlpha 结束透明度
    duration 动画运行时间 单位毫秒
    -->
</alpha>
AlphaAnimation alphaAnimation=null;
        //加载XML中的动画XML文件
        alphaAnimation= (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_alpha);
        //常用属性设置  各种动画通用
        alphaAnimation.setRepeatCount(3);//执行动画效果结束后重复执行3次  一共4次
        alphaAnimation.setRepeatMode(Animation.REVERSE);//重复模式
        //动画结束是否停止在最后一帧
        alphaAnimation.setFillAfter(true);
        //动画结束是否停止在第一帧
        alphaAnimation.setFillBefore(false);
        //设置插值器 动画执行速度  变速 加减速。。
        //AccelerateInterpolator减速
        //DecelerateInterpolator加速
        alphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
 ScaleAnimation:缩放动画
    代码加载的方式和方法的使用与AlphaAnimation一样
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:toXScale="1"
    android:toYScale="1"
    android:fromXScale="0.1"
    android:fromYScale="0.1"
    android:pivotY="0%"
    android:pivotX="0%"
    android:duration="2000">
    <!--
            浮点值 表示倍数 自身几倍
            fromXScale 动画在X轴以自身几倍伸缩开始
            toXScale   动画在X轴以自身几倍伸缩结束

            fromYScale 动画在Y轴以自身几倍伸缩开始
            toYScale   动画在Y轴以自身几倍伸缩结束

            pivotX  动画相对于控件自身的X坐标的开始位置
            pivotY  动画相对于控件自身的Y坐标的开始位置
            0% 0%  表示控件左上角 为0,0原点坐标
    -->
</scale>

TranslateAnimation:平移动画
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="-100%p"
    android:fromYDelta="0"
    android:toXDelta="100%p"
    android:toYDelta="0"
    android:duration="2000">
    <!--
            fromXDelta x轴起始位置
            toXDelta   X轴结束位置
            fromYDelta y轴起始位置
            toYDelta   y轴结束位置
            100%p 表示相对于父级
            100%相对于自身
-->
</translate>
RotateAnimation:旋转动画
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="2000"
    android:pivotX="50%"
    android:pivotY="50%"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <!--
      interpolator 指定动画的插值器
      accelerate_decelerate_interpolator   加速-减速
      accelerate_interpolator               加速
      decelerate_interpolator               减速

      fromDegrees 动画起始角度
      toDegrees   动画结束旋转的角度 可以大于360度
      负数表示逆时针旋转  正数表示顺时针旋转

      pivotX相对于view的X坐标的开始位置
      pivotY相对于view的Y坐标的开始位置
绝对尺寸 100px
      50% 相对尺寸 相对于自身的50%
      50%p 相对尺寸 相对于父容器的50%
      50%为物件的X或Y方向坐标上的中点位置
     duration  动画播放时间 单位毫秒
-->
</rotate>

通过构造方法创建  
//在代码中定义 动画实例对象
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
     
    //根据各自的构造方法来初始化一个实例对象
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
 
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
             Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
 
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
 
myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

AlphaAnimation
AnimationAlphaAnimation(float fromAlpha, float toAlpha)
//第一个参数fromAlpha为 动画开始时候透明度
//第二个参数toAlpha为 动画结束时候透明度
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
//说明:
//                0.0表示完全透明
//                1.0表示完全不透明


myAnimation_Alpha.setDuration(5000);
//设置时间持续时间为 5000毫秒

ScaleAnimation
ScaleAnimation(float fromX, float toX, float fromY, float toY,
                   int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 
        //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸    
        //第二个参数toX为动画结束时 X坐标上的伸缩尺寸     
        //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸    
        //第四个参数toY为动画结束时Y坐标上的伸缩尺寸  
        /*说明:
                            以上四种属性值    
                            0.0表示收缩到没有 
                            1.0表示正常无伸缩     
                            值小于1.0表示收缩  
                            值大于1.0表示放大
        */
        //第五个参数pivotXType为动画在X轴相对于物件位置类型  
        //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
        //第七个参数pivotXType为动画在Y轴相对于物件位置类型   
        //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
        myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
                     Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

        myAnimation_Scale.setDuration(700);
        //设置时间持续时间为 700毫秒
 TranslateAnimation
 TranslateAnimation(float fromXDelta, float toXDelta,
                               float fromYDelta, float toYDelta) 
        //第一个参数fromXDelta为动画起始时 X坐标上的移动位置    
        //第二个参数toXDelta为动画结束时 X坐标上的移动位置      
        //第三个参数fromYDelta为动画起始时Y坐标上的移动位置     
        //第四个参数toYDelta为动画结束时Y坐标上的移动位置 

RotateAnimation
RotateAnimation(float fromDegrees, float toDegrees, 
                    int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
        //第一个参数fromDegrees为动画起始时的旋转角度    
        //第二个参数toDegrees为动画旋转到的角度   
        //第三个参数pivotXType为动画在X轴相对于物件位置类型  
        //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
        //第五个参数pivotXType为动画在Y轴相对于物件位置类型   
        //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
        myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);


属性动画
  相对补间动画  属性动画会真正的使目标对象的属性值发生改变,不像补间动画只是影像的改变    只能修改具有get/set方法的属性值
  因为可以修改对象的属性,属性动画可以做到更多的效果,改变文本大小,背景颜色等等
  属性动画创建在 res/animator
  
ValueAnimator

包含属性动画的所有核心功能,动画时间,开始、结束属性值,属性值计算方法等。

ValuAnimiator设置开始结束值 实现ValueAnimator.onUpdateListener接口,

这个接口只有一个函数onAnimationUpdate(),在这个函数中会传入ValueAnimator对象做为参数,通过这个ValueAnimator对象的getAnimatedValue()函数可以得到当前的属性值

把属性值设置给某个控件的某个属性

  使用xml
<?xml version="1.0" encoding="utf-8"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:valueFrom="0"
    android:valueTo="300"
    android:valueType="intType"
    android:interpolator="@android:interpolator/overshoot">
    <!--
        valueFrom  起始值
        valueTo    结束值
        valueType  值的类型
        intType整数值、floatType浮点值、colorType颜色值
        interpolator插值器
    -->
</animator>

ValueAnimator valueAnimator=null;
        //通过AnimatorInflater.loadAnimator()加载xml 创建ValueAnimator
        valueAnimator= (ValueAnimator) AnimatorInflater.loadAnimator(this,R.animator.animator_value);
        //动画执行时间
        valueAnimator.setDuration(3000);
        //值改变监听
        valueAnimator.addUpdateListener(listener);
        //开始动画
        valueAnimator.start();

private ValueAnimator.AnimatorUpdateListener listener=new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
       //获取值
            int value= (int) animation.getAnimatedValue();
       //btnValueAnimator为测试控件
        //设置控件X轴平移
        btnValueAnimator.setTranslationX(value);
        }
    };

 使用代码
/**
         * valueAnimator 单个值
         */
        //代码创建  ValueAnimator类自身的方法
        //ofFloat值类型float
        ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,1);
        //ofInt值类型int 从0~300
        valueAnimator=ValueAnimator.ofInt(0,300);
        //也可以用来设置颜色 在颜色改变过程中会将颜色变化情况显示出来
        //红色到蓝色的改变过程 显示N种颜色
        valueAnimator=ValueAnimator.ofInt(Color.RED,Color.BLUE);
        //ofArgb设置颜色 如果无法使用  是的sdk版本低了
        //这个方法改变颜色过程中只显示红色和蓝色
        //valueAnimator=ValueAnimator.ofArgb(Color.RED,Color.BLUE);
        //设置插值器
        valueAnimator.setInterpolator(new CycleInterpolator());


        /**
         *
         * ValueAnimator.ofPropertyValuesHolder 设置多个值
         */
        //设置动画属性  参数1:名字  参数2,3值的变化区间
        PropertyValuesHolder alphaHolder=PropertyValuesHolder.ofFloat("alpha",0f,1f);
        PropertyValuesHolder widthHolder=PropertyValuesHolder.ofInt("width",0,300);
        //ValueAnimator.ofPropertyValuesHolder 添加holder 创建动画
        valueAnimator=ValueAnimator.ofPropertyValuesHolder(alphaHolder,widthHolder);
        //动画执行时间
        valueAnimator.setDuration(3000);
        //值改变监听
        valueAnimator.addUpdateListener(listener);

ObjectAnimator:
//用来测试的button
        Button btnObjectAnimator= (Button) findViewById(R.id.btn_object_animator);
        //加载动画
        ObjectAnimator objectAnimator= (ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.animator_object);
        //绑定控件
        objectAnimator.setTarget(btnObjectAnimator);

        //参数1 绑定控件 参数2 设置 属性 参数3 设置值
        objectAnimator=ObjectAnimator.ofInt(btnObjectAnimator,"textColor",Color.RED);
        //PropertyValuesHolder设置多个属性
        PropertyValuesHolder translationXHolder=PropertyValuesHolder.ofFloat("translationX",0,300);
        PropertyValuesHolder translationYHolder=PropertyValuesHolder.ofFloat("translationY",0,200);
        objectAnimator=ObjectAnimator.ofPropertyValuesHolder(btnObjectAnimator,translationXHolder,translationYHolder);
        objectAnimator.setDuration(3000);
     //开始动画
     objectAnimator.start();



属性动画、帧动画、补间动画的介绍使用及对比

属性动画、帧动画、补间动画的介绍使用及对比版权声明:转载必须注明本文转自南轩的博客: http://blog.csdn.net/nanxuan521 在android开发中经常会碰到一些动画...
  • nanxuan521
  • nanxuan521
  • 2016年09月22日 10:48
  • 2992

Android--Animotion动画详解-逐帧动画,补间动画,属性动画。

Android动画分类: 视图动画 ( View Animation ): 逐帧动画(Frame by Frame Animation); 补间动画(TweenedAnimations Animati...
  • u010378579
  • u010378579
  • 2015年09月20日 01:36
  • 1253

Android动画总结(属性动画,补间动画,帧动画)

Android 动画总结csdn图片可能有问题,可以看原文地址:http://www.jianshu.com/p/d98e79486373动画分类Android中动画大概分为3类: TweenAnim...
  • u013647382
  • u013647382
  • 2016年10月09日 14:25
  • 1715

Android帧、补间、属性动画

这篇博客介绍了Android中动画的帧动画、补间动画、属性动画。至于VectorDrawable(Android5.0)后期会单独更新博客讲解。...
  • fkq_2016
  • fkq_2016
  • 2017年11月16日 17:54
  • 58

android 补间动画 tween animation xml基本属性

Tween动画是展现出旋转、渐变、移动、缩放的这么一种转换过程,即补间动画。Tween动画有两种定义方式:XML形式,编码形式。 XML定义动画,按照动画定义语法完成XML,置于/res/ani...
  • u010745407
  • u010745407
  • 2015年03月25日 10:49
  • 345

Android 补间、属性动画----重新认识Android(12)

Android 补间、属性动画----重新认识Android(12)
  • AND_YOU_with_ME
  • AND_YOU_with_ME
  • 2017年04月19日 14:25
  • 114

Android属性动画简单实现图片的伸缩

![这里写图片描述](http://img.blog.csdn.net/20171025154711043?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc...
  • qq_39698152
  • qq_39698152
  • 2017年10月25日 09:33
  • 107

Android属性动画的简单使用方法

import android.os.Bundle; import android.animation.AnimatorInflater; import android.animation.Animat...
  • qq_15988951
  • qq_15988951
  • 2016年10月21日 19:36
  • 80

Android简单用属性动画实现两个控件重叠

1.描述: 简单的实现一个小动画,两个控件重叠。 2.思路: 获取两个控件之间的位置在X,Y轴方向的差值。 /** * 计算两个控件之间的距离 * @param fromView * ...
  • xiaoguda1
  • xiaoguda1
  • 2015年10月30日 15:57
  • 516

Android 属性动画的简单使用

属性动画跟补间动画差不多,因为:效果一样 不一样的是: 补间动画:只有效果; 属性动画:是实质性的改变了图片的位置,大小,透明度,旋转度。 在MainActivity里面直接上代码:...
  • YuEOrange
  • YuEOrange
  • 2017年12月12日 21:48
  • 66
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 帧动画,补间动画,属性动画的简单总结
举报原因:
原因补充:

(最多只允许输入30个字)