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

时间:2022-09-07 20:42:40
 
帧动画——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补间动画&comma;实现类京东商城首页广告Banner切换效果

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

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

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

  3. Android动画-补间&lpar;Tween&rpar;动画

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

  4. Android开发&lpar;26&rpar;--补间动画&lpar;Tween&rpar;的实现

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

  5. Android笔记&lpar;六十四&rpar; android中的动画——补间动画(tweened animation)

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

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

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

  7. android 开发 View &lowbar;2&lowbar; View的属性动画ObjectAnimator ,动画效果一览

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

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

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

  9. android 开发 View &lowbar;3&lowbar; View的属性动画ValueAnimator

    ValueAnimator ValueAnimator继承自抽象类Animator.要让属性动画渐变式地更改对象中某个属性的值,可分两步操作:第一步,动画需要计算出某一时刻属性值应该是多少:第二步,需 ...

随机推荐

  1. Python2&period;7如何安装numhttp&colon;&sol;&sol;www&period;cnblogs&period;com&sol;yuanzm&sol;p&sol;4089856&period;htmlpy

    numpy是python一个函数库,做数据挖掘是很好的.但是一般是不带这个函数库的,所以接下来我要讲下如何安装这个函数库, 首先有一种方法是: 傻瓜式安装法:https://sourceforge.n ...

  2. ServletDemo

    1. Servlet 接口 继承 Servlet 接口,实现Servlet 接口的 所有抽象方法! 实现类代码 package xw.servlet; import java.io.IOExcepti ...

  3. JQuery拾遗

    1.关于JQuery的animate,可以操作background么? 答:如果是单纯的JQuery不可以,需要引入JQuery的ui核心库.否则只支持宽高.透明度.上下左右位置的变化. 2.能否说一 ...

  4. &lbrack;Cycle&period;js&rsqb; Main function and effects functions

    We need to give structure to our application with logic and effects. This lessons shows how we can o ...

  5. 普实软件:MES机器数据维护

    概述 机器数据有两个菜单,机器主数据在制造数据模块下,机器MES数据相关的设置在MES模块下,两个菜单查看的内容是一致的,但是机器主数据显示的是普通的机器,可做新增.编辑.删除操作,机器MES数据仅做 ...

  6. my new start

    my new start in blog csdn : today i formally migrate my personal technical blog from sina to here in ...

  7. css选择器概述

    css选择器种类 id选择器 类选择器.属性选择器.伪类选择器 元素选择器.伪元素选择器 通配符选择器.子类选择器.后代选择器.相邻兄弟选择器.选择器分组 一.id选择器 <p id=&quot ...

  8. neutron二

    第四篇neutron— 网络实践   一.虚拟机获取 ip:   用 namspace 隔离 DHCP 服务   Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 通过 ...

  9. JNI 开发基础篇:Android开发中os文件的探索

    正题: android开发中,时长会遇到os文件的使用,那么os文件到底是什么?在这篇文章中会进行说明. .os文件在android中意味着C语言书写的方法,经android提供的ndk进行编译,从而 ...

  10. 网工最实用最常用的网络命令之一——Ping 命令详解(一)

    Ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障. ...