标签: 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. web从入门开始(1)------简介

    服务端与客户端 HTML简介

  2. Exchange Server 2007的即将生命周期,您的计划是?

    多数人做微软技术,Exchange Server 几乎所有 Microsoft 产品,都具有产品支持生命周期,原厂提供的新增功能. 错误修复.安全修补程序等.产品生命周期通常持续时间 10 年,超过期 ...

  3. Flex表格中添加图片

      Flex4.5中datagrid加入图片显示image <s:DataGrid id="maingrid" x="0" y="36" ...

  4. 整理:20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

  5. 通过 dhcp-agent 访问 Metadata - 每天5分钟玩转 OpenStack(168)

    OpenStack 默认通过 l3-agent 创建和管理 neutron-ns-metadata-proxy,进而与 nova-metadata-api 通信.但不是所有环境都有 l3-agent, ...

  6. java.lang.NoClassDefFoundError异常

    1.错误信息 2.错误分析: JVM读到程序的第三行,会在当前路径 "D:\java" 下寻找com.yangquan.aolun这个包路径下的Cat类,但当前路径下根本就没有co ...

  7. Android Studio项目构建常见问题解决

    1. 创建或导入项目后编译时一直在等待 问题: 原因:AS连网去下载gradle了,但是网络不好或不通 解决:禁用网络,AS就会立即自动终止下载进入到主界面了.此时再去指定离线的gradle版本进行编 ...

  8. unity插件开发——Selection

    Selection是一个静态类,它的主要功能是获取在project窗口中鼠标选择的对象或者是inspector窗口的当前显示的对象.它的字段有 activeGameObject activeInsta ...

  9. 大数据学习记录之ssh绵密登录

    1,在服务器端 ssh-keygen 2,使用ssh-copy-id 192.168.2.146 3,再测试一下ssh 192.168.2.146 exit 退出当前登录 具体流程为:A,B两台机器 ...

  10. Truncated incorrect DOUBLE value错误

    mysql报错:Truncated incorrect DOUBLE value sql的update语法错误eg: update Person set name = 'auhnayuiL' and ...