Android动画技术分析
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动画技术分析相关推荐
- [Android] Android Badge技术分析
Android Badge技术分析 Badge红点最初来自于IOS的UX设计之中,早期版本的Android原生并没有这个设计,从Android O(SDK 26)开始,Google才开始提供官方的AP ...
- Android Gallery2技术分析
概述 图库和相机在内部实现上其实是共用的一个app,即Gallery2.它们是Gallery2的两个不同的入口.图库的主要功能是展示和管理设备中的或者网络上的媒体内容(照片.视频),虽然名字是图库 ...
- Android 动画技术
关于android动画主要有三种:补间动画,逐帧动画和属性动画(android3.0以后引入)详细了解动画的基本知识,可详细阅读该博文http://www.cnblogs.com/angeldevil ...
- Android动画原理分析
最近在Android上做了一些动画效果,网上查了一些资料,有各种各样的使用方式,于是乘热打铁,想具体分析一下动画是如何实现的,Animation, Animator都有哪些区别等等. 首先说Anima ...
- android 补间动画有停顿,Android动画原理分析(一)----补间动画
1.基本特点 补间动画(Tween动画),是android最早的动画框架,从Android1.0开始就有. 功能:可以实现移动.旋转.缩放.渐变四种效果以及这四种效果的组合形式. 实现形式:xml和代 ...
- Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...
AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF The name of the DepartmentBeijing Forest Studio 北京理工大学信息 ...
- 《纯技术分析阿里云OS和Android之间的关系》补充
前面一份投稿的错误很抱歉,rom本身就找错了,用了一个AOSP-like的刷机包.好在这份内容错误的投稿多少起到了抛砖引玉的作用,当天晚上,就给出了正确的rom的分析<纯技术分析阿里云OS和An ...
- 《App研发录:架构设计、Crash分析和竞品技术分析》— Android 书籍
文章目录 第1章 重构,夜未眠 3 第2章 Android网络底层框架设计 19 第3章 Android经典场景设计 53 第4章 Android命名规范和编码规范 83 第5章 Crash异常收集与 ...
- android 动画卡顿分析工具
android 动画卡顿分析工具 Android应用性能优化之分析工具 上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅? 这东西其实最初我自己也觉得有点废话,用起 ...
最新文章
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
- 合工大建筑和计算机专业哪个好,合肥工业大学最好的专业是什么(10大热门专业排名)...
- matlab中读取txt数据文件(txt文本文档)
- 学习笔记Hive(三) —— Hive应用(1)—— 数据库定义、创建表
- GIS讲堂第二课-地图切片简介以及OL中的调用
- vue 安装php,vue中使用openinstall
- spring boot连接数据库
- Oracle中计算两个时间的时间差:
- 深入深出Sigmoid与Softmax的血缘关系
- 梁家卿 | 百科知识图谱同步更新
- 【英语学习】【Level 08】U05 Better option L5 A picture is worth a thousand words
- 萤火虫pte小程序_【PTE战报】84炸的Maggie,RS试试这样入手开始练习
- android源码解析------Media多媒体framework层分析
- SEO:提高关键词排名的28个SEO技巧
- 回顾2006年:网络通信十大事件
- Linux 堆分析,堆排序的分析及实现
- OpenCL编程基本流程及完整示例
- 防止孩子使用计算机的软件,如何防止熊孩纸在电脑里乱装软件
- Java同步和异步,阻塞和非阻塞
- 阅读笔记:利用Python进行数据分析第2版——第10章 数据聚合与分组运算