Android的动画本来有俩种:1、补间动画tween Animation;2、帧动画FrameAnimation

但是Android3.0之后又加入了属性动画 Property Animation

1、补间动画tween Animation :包括移动、渐变、伸缩、旋转,一般是定义在res-anim这个资源文件夹下,然后res-style中定义这个动画,

<style name="Anim_Pop_TopOrBotom"><item name="android:windowEnterAnimation">@anim/pop_in_bottom_to_top</item><item name="android:windowExitAnimation">@anim/pop_out_top_to_bottom</item></style>

,在代码中使用

window.setAnimationStyle(R.style.Anim_Pop_TopOrBotom);TranslateAnimation translateAnimation = new TranslateAnimation(0,100,0,300);RotateAnimation rotateAnimation = new RotateAnimation(0,360f);ScaleAnimation scaleAnimation = new ScaleAnimation(1,2,1,2);AnimationSet set = new AnimationSet(true);  //组合动画set.addAnimation(translateAnimation); //设置动画set.addAnimation(rotateAnimation); //设置动画set.addAnimation(scaleAnimation); //设置动画set.setFillAfter(true);set.setDuration(3000);  //设置动画时间v.startAnimation(set); //启动

2、帧动画FrameAnimation    这两种只适用于View上,

3、属性动画 Property Animation:

Android3.0之后增加了属性动画:属性动画可以定义在res-animator的资源文件中,它是用来在特定的时间修改对象的属性,例如背景颜色和alpha等等,常用的Java类有:ValueAnimator 、ObjectAnimator和AnimatorSet

<set  android:ordering=["together" | "sequentially"]]]>  <objectAnimator  android:propertyName="string"  android:duration="int"  android:valueFrom="float | int | color"  android:valueTo="float | int | color"  android:startOffset="int"  android:repeatCount="int"  android:repeatMode=["repeat" | "reverse"]  android:valueType=["intType" | "floatType"]/>  <animator  android:duration="int"  android:valueFrom="float | int | color"  android:valueTo="float | int | color"  android:startOffset="int"  android:repeatCount="int"  android:repeatMode=["repeat" | "reverse"]  android:valueType=["intType" | "floatType"]/>  <set]]>  ...  </set>
</set>  

文件需要有根元素,可以使用<set>, <objectAnimator>, or <valueAnimator>. <set>可以作为一个集合,而且集合中还可以存在<set>元素。

AnimatorSetset=(AnimatorSet)AnimatorInflater.loadAnimator(myContext,  R.anim.property_animator);
set.setTarget(myObject);
set.start(); 

属性动画的具体实现原理

从上述工作原理可以看出属性动画有两个非常重要的类:ValueAnimator 类 & ObjectAnimator 类,其实属性动画的使用基本都是依靠这两个类

首先介绍ValueAnimator 类:

  • 定义:属性动画机制中 最核心的一个类
  • 实现动画的原理:通过不断控制 值 的变化,再不断 手动 赋给对象的属性,从而实现动画效果

ValueAnimator类中有3个重要方法:

  1. ValueAnimator.ofInt(int values)
  2. ValueAnimator.ofFloat(float values)
  3. ValueAnimator.ofObject(int values)

下面直接看代码:

private void test() {// 步骤1:设置动画属性的初始值 & 结束值ValueAnimator anim = ValueAnimator.ofInt(20, 600);// ofInt()作用有两个// 1. 创建动画实例// 2. 将传入的多个Int参数进行平滑过渡:此处传入0和1,表示将值从0平滑过渡到1// 如果传入了3个Int参数 a,b,c ,则是先从a平滑过渡到b,再从b平滑过渡到C,以此类推// ValueAnimator.ofInt()内置了整型估值器,直接采用默认的.不需要设置,即默认设置了如何从初始值 过渡到 结束值// 关于自定义插值器我将在下节进行讲解// 下面看看ofInt()的源码分析 ->>关注1// 步骤2:设置动画的播放各种属性anim.setDuration(500);// 设置动画运行的时长anim.setStartDelay(500);// 设置动画延迟播放时间anim.setRepeatCount(0);// 设置动画重复播放次数 = 重放次数+1// 动画播放次数 = infinite时,动画无限重复 anim.setRepeatMode(ValueAnimator.RESTART);// 设置重复播放动画模式// ValueAnimator.RESTART(默认):正序重放// ValueAnimator.REVERSE:倒序回放// 步骤3:将改变的值手动赋值给对象的属性值:通过动画的更新监听器// 设置 值的更新监听器// 即:值每次改变、变化一次,该方法就会被调用一次anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {int currentValue = (Integer) animation.getAnimatedValue();// 获得改变后的值System.out.println(currentValue);// 输出改变后的值// 步骤4:将改变后的值赋给对象的属性值,下面会详细说明btn_click.getLayoutParams().width = currentValue;// 步骤5:刷新视图,即重新绘制,从而实现动画效果btn_click.requestLayout();}});anim.start();// 启动动画}// 关注1:ofInt()源码分析public static ValueAnimator ofInt(int... values) {// 允许传入一个或多个Int参数// 1. 输入一个的情况(如a):从0过渡到a;// 2. 输入多个的情况(如a,b,c):先从a平滑过渡到b,再从b平滑过渡到CValueAnimator anim = new ValueAnimator(); // 创建动画对象anim.setIntValues(values); // 将传入的值赋值给动画对象return anim;}

展示效果图:

Android动画分类相关推荐

  1. android动画的实现原理,Android动画的实现原理 .

    1.动画运行模式 独行模式 中断模式 2.Animation类 每个动画都重载了父类的applyTransformation方法这个方法的主要作用是把一些属性组装成一个Transformation类, ...

  2. Android 动画分析学习笔记

    一:分类: Android动画分三种:view动画(对场景中的对象不断做图像变换<平移,缩放,旋转,透明度>).帧动画(顺序播放一系列图像产生动画效果).属性动画(动态改变对象属性). 二 ...

  3. android动画帧率_Android动画进阶—使用开源动画库nineoldandroids

    前言 Android系统支持原生动画,这为应用开发者开发绚丽的界面提供了极大的方便,有时候动画是很必要的,当你想做一个滑动的特效的时候,如果苦思冥想都搞不定,那么你可以考虑下动画,说不定动画轻易就搞定 ...

  4. Android动画(1)

    Android动画:这是一份全面 & 详细的动画使用攻略 前言 动画的使用 是 Android 开发中常用的知识 可是动画的种类繁多.使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时 ...

  5. Android 动画详解-思维导图版

    转载请注明链接: https://blog.csdn.net/feather_wch/article/details/81503233 涉及视图动画(补间动画.逐帧动画).属性动画三种动画的使用方法, ...

  6. 初始Android动画

    初始Android动画 在Android开发过程中,为了提高美感.用户体验,动画是必不可少的一部分. 本篇主要说一下动画的分类: 1.View Animation 视图动画,又叫TweenAnimat ...

  7. android 动画多次使用,Android动画使用(二)——补间(View)动画

    1.Android动画简介 1.1 分类 Android系统提供了很多丰富的API去实现UI的2D与3D动画,最主要的划分可以分为如下几类: Drawable Animation: 这种动画(也叫Fr ...

  8. Android动画浅谈(一)

    Android动画的分类 Android中的动画主要有三类:逐帧动画.补间动画和属性动画,.逐帧动画的原理是利用人类的"视觉残留",通过改变播放图片的形式来达到动画的效果,在实际开 ...

  9. Android动画学习之补间动画

    补间动画简介 补间动画指的是做FLASH动画时,在两个关键帧中间需要做"补间动画",才能实现图画的运动:插入补间动画后两个关键帧之间的插补帧是由计算机自动运算而得到的. 补间动画分 ...

最新文章

  1. 5月26 留言板练习题
  2. java开发组态软件下载_基于JAVA的煤矿安全监控系统组态软件设计研究.pdf
  3. 组态王c语言编程实例,组态王命令语言程序.doc
  4. json返回页面读取data里的值都是object_【一】尤大神都说Vite香,让我来手把手分析Vite原理...
  5. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
  6. 分类数据显示功能_缓存优化
  7. Python实现机器学习
  8. linux是否32位系统文件夹,技术|如何判断Unix系统的一个库文件是32位还是64位的...
  9. TCP_NODELAY详解
  10. 计算机组成原理硬件设计,计算机组成原理硬件设计报告..doc
  11. ArcGIS的基本使用
  12. keil删除工程_安装及卸载keil5
  13. Vue 2.6.13 源码解析(四) Observer、Dep、Watcher与订阅
  14. matlab亮度对比度调节公式,图像编辑之对比度调整(亮度对比度的算法公式)
  15. 高级JAVA工程师的岗位职责,岗位要求
  16. php网页制作代码_如何制作一个简单的HTML登录页面(附代码)
  17. Google开源C++模板库ctemplate完整使用示例
  18. 研究下php加密混淆,解析php混淆加密解密的手段,如 phpjm,phpdp神盾
  19. LeetCode:974. Subarray Sums Divisible by K - Python
  20. Android混淆(包括混淆四大组件)

热门文章

  1. 【新手】关于路径格式的问题(错误提示incomplete universal character name)
  2. 视频压缩转码FFmpegFrameRecorder
  3. IDEA修改注释字体
  4. oracle simphony_MICROS Simphony | All-In-One Restaurant POS System | Oracle 中国
  5. 自定义View(二-番外4-drawBitmapMesh)
  6. (笔记)罗辑思维-学习的真相
  7. matlab各种潮流计算代码,基于MATLAB的潮流计算源程序代码
  8. python设计樱花_用Python画樱花?想得美就能画得美(上)
  9. C语言while和do-while练习题
  10. 谈servlet生命周期