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

通过构造方法创建

  构造参数详解  此段内容选自 http://www.cnblogs.com/aimeng/archive/2011/10/10/2206710.html

//在代码中定义 动画实例对象
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);
   private ValueAnimator.AnimatorUpdateListener listener=new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
/**
* 单个值获取 getAnimatedValue取出变化值 根据设置类型强转
* btnValueAnimator 测试用的button
*/
// int value= (int) animation.getAnimatedValue();
// btnValueAnimator.setTranslationX(value);横坐标平移 // float value= (float) valueAnimator.getAnimatedValue();
// btnValueAnimator.setAlpha(value);透明度改变 // int value= (int) animation.getAnimatedValue();
// btnValueAnimator.setTextColor(value);文字颜色改变
/**
* PropertyValuesHolder存了多个值 通过名字获取 强制转换
*/
float alpha= (float) valueAnimator.getAnimatedValue("alpha");
int width= (int) valueAnimator.getAnimatedValue("width");
btnValueAnimator.setAlpha(alpha);//改变透明度
//图像绘制 左边不变从右边慢慢增加
//修改控件的width height不能使用setWidth或setHeight
btnValueAnimator.setRight(width);
//btnValueAnimator.setBottom(width); }
};
ObjectAnimator:

继承自ValueAnimator,要指定一个对象及该对象的一个属性,当属性值计算完成时自动设置为该对象的相应属性,不需要设置监听,底层自动完成,一般会用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://www.cnblogs.com/r-decade/

android 帧动画,补间动画,属性动画的简单总结的更多相关文章

  1. Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 某天看到京东商城首页的滑动广告的Banner,在流动切换的时候有立体的动画效果,感觉很有意思,然后研究了下 ...

  2. js 动画补间 Tween

    1 /* RunningList (触发过程中可以安全的删除自己) 2 如果触发过程中删除(回调函数中删除正在遍历的数组), 不仅 len 没有变(遍历前定义的len没有变, 真实的len随之减少), ...

  3. 属性动画 补间动画 帧动画 基本使用案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. Android动画-补间(Tween)动画

    Android动画的两种方式,其中帧动画上篇文章已经讲了,这次主要讲解的就是补间动画,补间动画就是动画业务场景中常用的旋转,平移,缩放,和渐变效果,帧动画是通过轮播动画实现动画效果,补间动画通过在两个 ...

  5. Android开发(26)--补间动画(Tween)的实现

    补间动画(Tween Animation) 补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的.补间动画的优点是 ...

  6. Android笔记(六十四) android中的动画——补间动画(tweened animation)

    补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效 ...

  7. Android开发之补间动画、XML方式定义补间动画

    四种补间动画: 1.透明: 2.缩放: 3.位移: 4.旋转: //点击按钮 实现iv 透明的效果 动画 public void click1(View v) { //1.0意味着着完全不透明 0.0 ...

  8. android 开发 View _2_ View的属性动画ObjectAnimator ,动画效果一览

    支持:https://www.cnblogs.com/whoislcj/p/5738478.html translationX的效果: protected void onCreate(Bundle s ...

  9. android动画具体解释二 属性动画原理

    property动画是一个强大的框架,它差点儿能使你动画不论什么东西. 你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上. 一个属性动画在一定时间内多次改变一个属性(对象的一个字 ...

随机推荐

  1. Dancing Links and Exact Cover

    1. Exact Cover Problem DLX是用来解决精确覆盖问题行之有效的算法. 在讲解DLX之前,我们先了解一下什么是精确覆盖问题(Exact Cover Problem)? 1.1 Po ...

  2. DotNet Run 命令介绍

    前言 本篇主要介绍 asp.net core 中,使用 dotnet tools 运行 dotnet run 之后的系统执行过程. 如果你觉得对你有帮助的话,不妨点个[推荐]. 目录 dotnet r ...

  3. 一步步学习javascript基础篇(9):ajax请求的回退

    需求1: ajax异步请求 url标识请求参数(也就是说复制url在新页面打开也会是ajax后的效果) ajax异步请求没问题,问题一般出在刷新url后请求的数据没了,这就是因为url没有记录参数.如 ...

  4. Win下最爱效率利器:AutoHotKey

    AutoHotkey是一个windows下的开源.免费.自动化软件工具.它由最初旨在提供键盘快捷键的脚本语言驱动(称为:热键),随着时间的推移演变成一个完整的脚本语言.但你不需要把它想得太深,你只需要 ...

  5. tornado上手

    http://www.tornadoweb.org/en/stable/ http://www.cnblogs.com/fanweibin/p/5418697.html import tornado. ...

  6. 从零开始编写自己的C#框架(20)——框架异常处理及日志记录

    最近很忙,杂事也多,所以开发本框架也是断断续续的,终于在前两天将前面设定的功能都基本完成了,剩下一些小功能遗漏的以后发现再补上.接下来的章节主要都是讲解在本框架的基础上进行开发的小巧. 本框架主要有四 ...

  7. 软件工程里的UML序列图的概念和总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...

  8. Vertica增加一个数据存储的目录

    Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...

  9. Vertica DBD 分析优化设计

    DBD = Database Designer,是Vertica数据库优化中最主要的原生工具. 首先运行admintools工具,按下面步骤依次执行: 1.选择"6 Configuratio ...

  10. 移动端web开发的那些坑

    1.为非a列表项添加触感样式 通过js注册touchstart和touchend事件,添加触感class的方式, 有个坑,低版本的Android浏览器,经常触发不到touchend,需要再额外注册一个 ...