热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

本文主要对android帧动画,补间动画,属性动画进行了简单总结,具有一定的参考价值,下面跟着小编一起来看下吧

帧动画——FrameAnimation

将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用

在Drawable文件夹下,创建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:透明度动画

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
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一样

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

TranslateAnimation:平移动画

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

RotateAnimation:旋转动画

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

通过构造方法创建 

构造参数详解  此段内容选自 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

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 
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");
  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();

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • SAP羞辱国产软件商:技术停在10年前
    SAP中国研究院总裁芮祥麟表示,国产软件厂商过于热衷概念炒作,技术水平停留在10年前的客户端架构水平。他认为,国内厂商推出基于SOA的产品或转型SAAS模式是不可能的,研发新架构需要时间。当前最热门的概念是云计算,芮祥麟呼吁国产厂商应该潜心研发底层架构。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文讲述了孙悟空写给白骨精的信件引发的思考和反省。孙悟空在信中对自己的行为进行了反思,认识到自己胡闹的行为并没有给他带来实际的收获。他也揭示了西天取经的真相,认为这是玉皇、菩萨设下的一场陷阱。他还提到了师傅的虚伪和对自己的实心话,以及自己作为师傅准备提拔的对象而被派下来锻炼的经历。他认为路上的九九八十一难也都是菩萨算计好的,唐僧并没有真正的危险。最后,他提到了观音菩萨在关键时刻的指导。这封信件引发了孙悟空对自己行为的思考和反省,对西天取经的目的和自己的角色有了更深入的认识。 ... [详细]
  • Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
    打开IIS,建一个网站,主机头用不带www的域名,随便指向一个目录。然后在这个网站上点右键,属性--主目录--重定向到URL如图ÿ ... [详细]
author-avatar
問露旧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有