# Android动画笔记
标签: Android开发艺术探索笔记
- View动画
- 帧动画
- 属性动画
View动画
View动画的作用对象时View,有4种动画效果,分别是平移动画、缩放动画、旋转动画、和透明度动画。
此类动画通常使用` XML `来定义。
动画的定义方式如下:
<set
android:interpolatoer="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true"|"false"]
>
<alpha
android:fromAlpha="float"
android:toAlpha="float"
/>
<scale
android:fromScaleX="float"
android:toScaleX="float"
android:fromScaleY="float"
android:toScaleY="float"
android:pivotX="float"
android:pivotY="float"
/>
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float"
/>
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float"
/>
</set>
动画的使用:
Button mButton = (Button) findViewById(R.id.button);
Animation animation = AnimationUtils.loadAnimation(this,R.anim.animation_test);
mButton.startAnimation(animation);
动画的监听:
通过Animation的setAnimationListener方法可以给View动画添加过程监听,接口如下所示:
public static interface AnimationListener{
void onAnimationStart(Animation animation);
void onAnimationEnd(Animation animation);
void onAnimationRepeat(Animation animation);
}
帧动画
帧动画是顺序播放一组预先定义的图片,类似于电影播放。使用比较简单,但是容易引起OOM,所以一般应该尽量避免使用。
View动画的使用场景
1. LayoutAnimation
LayoutAnimation作用于ViewGroup,更经常的是作用于ListView,使得每个子Item都具有此动画
- 定义
//res/anim/anim_layout.xml
<layoutAnimation
android:delay="0.5"
android:animationOrder="normal|reverse|random"
android:animation="@anim/anim_item"
/>
使用
- xml使用
<ListView
...
android:layoutAnimation="@anim/anim_layout"
/>
- java使用
ListView listView = ...;
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listView.setLayoutAnimation(controller);
2. Activity的切换效果
Activity的切换效果主要用到`overridePendingTransition(int enterAnim, int exitAnim)`这个方法,需要注意的是,**这个方法需要在`startActivity(Intent intent)`或者`finish()`之后被调用才能生效!**
属性动画
属性动画是API11新加入的特性,它可以对任何对象做动画,比较重要的概念是ValueAnimatior
、ObjectAnimator
、AnimatorSet
这几个概念。
注意ObjectAnimator
继承自ValueAnimatior
注意动画的默认间隔为300毫秒、默认帧率为10ms/帧
属性动画的使用
*属性动画也可以采用`XML`定义,但是推荐使用代码实现。*
//向上平移200dp,第一个参数为动画作用的对象,第二个参数为改变的属性,第三个参数为数组,改变的值
//注意:若第二个参数出错,即对象没有该属性,则动画不显示
//此外,若第三个参数没有变化初始值(只有一个值即目标值)时,该对象需要提供该属性的setter方法,否则会抛出异常
ObjectAnimator.ofFloat(object,"translationY",200).start();
//改变背景色
ValueAnimator colorAnim = ObjectAnimator.ofInt(this,"backgroundColor",0xFFFF8080,0xFF8080FF);
colorAnim.setDuration(3000);
colorAnim.setEvaluator(new ArgbEvalutor());
colorAnim.setRepeatCount(ValueAnimator.INFINITE);
colorAnim.setRepeatMode(ValueAnimator.REVERSE);
colorAnim.start();
//动画集合
AnimatorSet set = new AnimatorSet();
set.playTogether(
animator1,
animator2,
animator3,
animator4
);
set.start();
插值器与估值器
插值器(
TimeInterpolator
):它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比,系统预置的有LinearInterpolator
、AccelerateDecelerateInterpolator
、DecelerateIntepolator
等估值器(
TypeEvaluator
):它的作用是根据当前属性改变的百分比来计算改变后的属性值(插值器得出的值),系统预置的有IntEvaluator
(针对整型属性)、FloatEvaluator
(针对浮点型属性)和ArgbEvaluator
(针对Color属性)
属性动画的监听
属性动画也提供了监听器用于监听动画的过程,如下所示:
public static interface AnimatorListener{
void onAnimationStart(Animator animation);
void onAnimationEnd(Animator animation);
void onAnimationCancel(Animator animation);
void onAnimationRepeat(Animator animation);
}
此外,系统还提供了AnimatorListenerAdapter
这个类,我们可以通过这个类来有选择的实现上面的接口方法,而不必实现所有的方法。
另外,还有一个AnimatorUpdateListener
接口,如下所示:
public static interface AnimatorUpdateListener{
void onAnimationUpdate(ValueAnimator animation);
}
这个监听器会监听整个动画过程,每播放一帧,onAnimationUpdate()就会被调用一次。
# Android动画笔记的更多相关文章
- Android动画学习笔记-Android Animation
Android动画学习笔记-Android Animation 3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...
- Android群英传笔记——第七章:Android动画机制和使用技巧
Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...
- Android 动画学习笔记
Android动画的两种:Frame帧动画.Tween动画(位移动画)[实现:存放目录res/anim] Tween动画:(位移.缩放.旋转):通过对场景里的对象不断做图像变换. 四种效果Alpha. ...
- Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧
第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...
- 《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析
本节和<Android群英传>中的第七章Android动画机制与使用技巧有关系,建议先阅读该章的总结 第7章 Android动画深入分析 7.1 View动画 (1)android动画分为 ...
- Android 动画分析学习笔记
一:分类: Android动画分三种:view动画(对场景中的对象不断做图像变换<平移,缩放,旋转,透明度>).帧动画(顺序播放一系列图像产生动画效果).属性动画(动态改变对象属性). 二 ...
- Android学习笔记-tween动画之java实现
Android动画分为Tween动画和Frame动画,近期学习了,体tween动画,现在讲学习的心得以及相关知识介绍如下. Tween又称为补间动画,可以把对象进行缩小.放大.旋转和渐变等操作. ...
- 【转】Android开发笔记(序)写在前面的目录
原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...
- Android开发笔记(一百三十四)协调布局CoordinatorLayout
协调布局CoordinatorLayout Android自5.0之后对UI做了较大的提升.一个重大的改进是推出了MaterialDesign库,而该库的基础即为协调布局CoordinatorLayo ...
随机推荐
- 有关ospf抓包
有关ospf抓包 1.相关的路由器为这样子的: 路由器都运行了ospf: 抓包的链路为GE0/0/2 , 2.抓包图: 从图上我们可以看到,protocol info 这一栏里面出现了: hello ...
- 队列工厂之RabbitMQ
本次和大家分享的是RabbitMQ队列的用法,前一篇文章队列工厂之(MSMQ)中在描述的时候已经搭建了简单工厂,因此本章内容是在其之上扩充的子项不再过多讲解工厂的代码了:RabbitMQ应该是现在互联 ...
- Druid连接池配置(java无框架)
连接池是一个对数据库连接进行管理的东西,当一个线程需要用 JDBC 对 数据库操作时,它从池中请求一个连接.当这个线程使用完了这个连接,将它返回到连接池中,这样这就可以被其它想使用它的线程使用,而不是 ...
- 安卓Android的内存管理原理解析
Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况 ...
- C++获取字符cin,getchar,get,getline的区别
原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5241544.html 1.cin>> 1)最常见的是获取输入的一个字符或数字,如 in ...
- 基于ThinkPHP 5.0与Vue.JS 2.x的前后端开源开发框架VueThink
VueThink 项目介绍 VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的 ...
- eclipse如何安装插件
eclipse安装插件以springsource-tool-suite为例 打开eclipse,找到help/About Eclipse/ 然后点击右下角图标 找到EclipsePlatform对应的 ...
- Google永远不可能回到国内,只能是回忆
今天早上在微博上无意看 [谷歌翻译App在大陆地区恢复无障碍使用]这篇文章,不知不觉就点进去看一下,内心还是比较兴奋,为什么兴奋说不清楚.或许我们是真的喜欢Google的产品. 回想2010年Goog ...
- FitVids,一个轻视频插件,操作简单
最近在找一个视频插件,偶尔看见一个口碑啥的都不错的插件,FitsVids. fitvids.js 是个轻量级,易于使用的 jQuery 插件,用来在网页上播放指定宽度的嵌入视频.Fitvides.js ...
- Java进阶之内存管理与垃圾回收
Java是在JVM所虚拟出的内存环境中运行的.内存分为栈(stack)和堆(heap)两部分.我们将分别考察这两个区域. 栈 在Java中,JVM中的栈记录了线程的方法调用.每个线程拥有一个栈.在某个 ...