Android动画技术分析

本文将介绍Android动画的实现技术。Android动画实现有三种技术,逐帧动画(Drawable Animation),补间动画(View Animation)和属性动画(Property Animation)。下面列出了三者的特点:

1. 逐帧动画 图片一帧帧的播放,类似动画片
2. 补间动画将原始图片进行一系列的变换:平移,选择,缩放,淡入淡出。缺陷1) 只能对view进行变换,不能对自定义的非view对象进行变换,如自定义个代表点位置的Point类2) 不支持四种变换外的其他变换,如更换背景3) 只改变view的效果,不改变view的属性,如移动到新的位置后不响应点击事件
3. 属性动画1) 实现真正的移动2) 进行丰富的变换

逐帧动画和补间动画局限性比较大,属性动画的效果更加丰富完善,接下来我们介绍属性动画的使用方法。

属性动画主要涉及到三个类,ValueAnimator,ObjectAnimator和AnimatorSet。其中ValueAnimator用于对数值进行动画处理,ObjectAnimator用于对对象的某个属性进行动画处理,而AnimatorSet则用于组合动画的实现。

ValueAnimator:实现300毫秒内从0平滑变换到1。

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.setDuration(300);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float currentValue = (float) animation.getAnimatedValue();Log.d("TAG", "cuurent value is " + currentValue);}
});
anim.start();

ObjectAnimator:实现将Textview的translationX属性在1000毫秒内从当前值向左移100像素。

float curTranslationX = textView.getTranslationX();
ObjectAnimator moveLeftAnim = ObjectAnimator.ofFloat(textView, "translationX", curTranslationX, curTranslationX - 100);
moveLeftAnim.setDuration(1000);
moveLeftAnim.start();

AnimatorSet:组合动画,Textview先从屏幕左侧进入屏幕中心,然后旋转360度同时先变淡后变深。

ObjectAnimator moveIn = ObjectAnimator.ofFloat(textview, "translationX", -500f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(textview, "rotation", 0f, 360f);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
AnimatorSet animSet = new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();

AnimatorListener:Animator监听器,可以给动画效果添加监听器,处理开始动画,结束动画,重复动画,取消动画的事件

anim.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {}@Overridepublic void onAnimationCancel(Animator animation) {}
});

AnimatorListenerAdapter:提供了AnimatorListener四种回调函数的默认实现,可以按需重写某个监听事件。

anim.addListener(new AnimatorListenerAdapter() {
});

使用XML编写动画:通过XML编写动画,可以实现动画的重用。为了区别,一般把补间动画的xml放在res/anim文件夹下,属性动画xml放在res/animator文件夹下。

<set xmlns:android="http://schemas.android.com/apk/res/android"android:ordering="sequentially" ><objectAnimatorandroid:duration="2000"android:propertyName="translationX"android:valueFrom="-500"android:valueTo="0"android:valueType="floatType" ></objectAnimator><set android:ordering="together" ><objectAnimatorandroid:duration="3000"android:propertyName="rotation"android:valueFrom="0"android:valueTo="360"android:valueType="floatType" ></objectAnimator><set android:ordering="sequentially" ><objectAnimatorandroid:duration="1500"android:propertyName="alpha"android:valueFrom="1"android:valueTo="0"android:valueType="floatType" ></objectAnimator><objectAnimatorandroid:duration="1500"android:propertyName="alpha"android:valueFrom="0"android:valueTo="1"android:="floatType" ></objectAnimator></set></set>
</set>

调用方式如下:

Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file);
animator.setTarget(view);
animator.start();

参考:
https://developer.android.com/guide/topics/graphics/overview.html
http://blog.csdn.net/guolin_blog/article/details/43536355

Android动画技术分析相关推荐

  1. [Android] Android Badge技术分析

    Android Badge技术分析 Badge红点最初来自于IOS的UX设计之中,早期版本的Android原生并没有这个设计,从Android O(SDK 26)开始,Google才开始提供官方的AP ...

  2. Android Gallery2技术分析

    概述   图库和相机在内部实现上其实是共用的一个app,即Gallery2.它们是Gallery2的两个不同的入口.图库的主要功能是展示和管理设备中的或者网络上的媒体内容(照片.视频),虽然名字是图库 ...

  3. Android 动画技术

    关于android动画主要有三种:补间动画,逐帧动画和属性动画(android3.0以后引入)详细了解动画的基本知识,可详细阅读该博文http://www.cnblogs.com/angeldevil ...

  4. Android动画原理分析

    最近在Android上做了一些动画效果,网上查了一些资料,有各种各样的使用方式,于是乘热打铁,想具体分析一下动画是如何实现的,Animation, Animator都有哪些区别等等. 首先说Anima ...

  5. android 补间动画有停顿,Android动画原理分析(一)----补间动画

    1.基本特点 补间动画(Tween动画),是android最早的动画框架,从Android1.0开始就有. 功能:可以实现移动.旋转.缩放.渐变四种效果以及这四种效果的组合形式. 实现形式:xml和代 ...

  6. Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...

    AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF The name of the DepartmentBeijing Forest Studio 北京理工大学信息 ...

  7. 《纯技术分析阿里云OS和Android之间的关系》补充

    前面一份投稿的错误很抱歉,rom本身就找错了,用了一个AOSP-like的刷机包.好在这份内容错误的投稿多少起到了抛砖引玉的作用,当天晚上,就给出了正确的rom的分析<纯技术分析阿里云OS和An ...

  8. 《App研发录:架构设计、Crash分析和竞品技术分析》— Android 书籍

    文章目录 第1章 重构,夜未眠 3 第2章 Android网络底层框架设计 19 第3章 Android经典场景设计 53 第4章 Android命名规范和编码规范 83 第5章 Crash异常收集与 ...

  9. android 动画卡顿分析工具

    android 动画卡顿分析工具 Android应用性能优化之分析工具 上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅? 这东西其实最初我自己也觉得有点废话,用起 ...

最新文章

  1. access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
  2. 合工大建筑和计算机专业哪个好,合肥工业大学最好的专业是什么(10大热门专业排名)...
  3. matlab中读取txt数据文件(txt文本文档)
  4. 学习笔记Hive(三) —— Hive应用(1)—— 数据库定义、创建表
  5. GIS讲堂第二课-地图切片简介以及OL中的调用
  6. vue 安装php,vue中使用openinstall
  7. spring boot连接数据库
  8. Oracle中计算两个时间的时间差:
  9. 深入深出Sigmoid与Softmax的血缘关系
  10. 梁家卿 | 百科知识图谱同步更新
  11. 【英语学习】【Level 08】U05 Better option L5 A picture is worth a thousand words
  12. 萤火虫pte小程序_【PTE战报】84炸的Maggie,RS试试这样入手开始练习
  13. android源码解析------Media多媒体framework层分析
  14. SEO:提高关键词排名的28个SEO技巧
  15. 回顾2006年:网络通信十大事件
  16. Linux 堆分析,堆排序的分析及实现
  17. OpenCL编程基本流程及完整示例
  18. 防止孩子使用计算机的软件,如何防止熊孩纸在电脑里乱装软件
  19. Java同步和异步,阻塞和非阻塞
  20. 阅读笔记:利用Python进行数据分析第2版——第10章 数据聚合与分组运算

热门文章

  1. NRF2401无线通信
  2. 使用UltraEdit配置多行注释和取消多行注释
  3. JDBC连接MySQL数据库(一)
  4. 极品飞车服务器维修,极品飞车ONLINE-官方网站-腾讯游戏
  5. Alexa排名对新闻网站的参考作用(转)
  6. iphone5隐藏功能
  7. CAD常用快捷键——笔记
  8. 堡垒机JumpServer搭建与使用
  9. 鸿蒙os 2.0玩吃鸡,华为鸿蒙OS2.0[敏感词汇屏蔽]能简测:极致画质下的吃鸡王者更胜EMUI11...
  10. 二维偏序/数点——学习笔记