标签: 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新加入的特性,它可以对任何对象做动画,比较重要的概念是ValueAnimatiorObjectAnimatorAnimatorSet这几个概念。


注意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):它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比,系统预置的有LinearInterpolatorAccelerateDecelerateInterpolatorDecelerateIntepolator

  • 估值器(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动画笔记的更多相关文章

  1. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  2. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  3. Android 动画学习笔记

    Android动画的两种:Frame帧动画.Tween动画(位移动画)[实现:存放目录res/anim] Tween动画:(位移.缩放.旋转):通过对场景里的对象不断做图像变换. 四种效果Alpha. ...

  4. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

  5. 《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析

    本节和<Android群英传>中的第七章Android动画机制与使用技巧有关系,建议先阅读该章的总结 第7章 Android动画深入分析 7.1 View动画 (1)android动画分为 ...

  6. Android 动画分析学习笔记

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

  7. Android学习笔记-tween动画之java实现

    Android动画分为Tween动画和Frame动画,近期学习了,体tween动画,现在讲学习的心得以及相关知识介绍如下. Tween又称为补间动画,可以把对象进行缩小.放大.旋转和渐变等操作.   ...

  8. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  9. Android开发笔记(一百三十四)协调布局CoordinatorLayout

    协调布局CoordinatorLayout Android自5.0之后对UI做了较大的提升.一个重大的改进是推出了MaterialDesign库,而该库的基础即为协调布局CoordinatorLayo ...

随机推荐

  1. python--对函数的理解

    函数的定义 def functionname(arg): Suite Return [expression] 1.def 定义函数时的关键字 2.functionname 函数名 3.arg函数的参数 ...

  2. Solr field alias

    Field alias Any field, function, or transformer can be displayed with a different name in the output ...

  3. python + selenium <一>

    python 安装 python 下载地址: http://python.org/getit/ ez_setup.py 下载地址: https://pypi.python.org/packages/s ...

  4. markown编辑器截图粘贴预览,并将图片传至七牛云

    最近在做一个项目,需要实现类似QQ截图后,就是能够在富文本编辑器中粘贴截图并预览. 先看一下效果: 分析一下实现步骤: QQ截图后在编辑器中粘贴,肯定会有一个粘贴事件,即 paste 事件 在事件回调 ...

  5. zip error: Invalid command arguments

    在编译使用svn管理的android代码时,会出现如下错误: zip error: Invalid command arguments (cannot repeat names in zip file ...

  6. Python--定时给Ta讲笑话

    受到这篇文章的启发http://python.jobbole.com/84796/,我也动手写了个程序玩一玩. 接口请求说明: 接口请求地址http://api.1-blog.com/biz/bizs ...

  7. delphi处理消息的几种方式

    第一种:自定义处理单条消息 unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, C ...

  8. 完全关闭IIS日志,包括System32下的LogFile

    早上突然发现网站访问不了了,登陆服务器一看,是C盘满了. 查一看,是IIS产生了70多G的日志,但明明已关闭日志了,还是会产生. 产生的目录在:C:\Windows\System32\LogFiles ...

  9. TensorFlow安装-ubuntu

    windows下某些tensorflow例子跑不成功,比如https://www.tensorflow.org/tutorials/wide 中的例子报下面的错误:' 'NoneType' objec ...

  10. 【Egret】3d 服务器配置

    在服务器MIME里添加这些类型就可以了: