标签: 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. 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐

    1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 432  Solved: 270[ ...

  2. UI 基本控件使用

    一>UITextFiled  ———>UITextField是什么 UITextField ( 输入框 ) : 是控制文本输入和显示的控件.在APP中UITextField 出现频率很高 ...

  3. js实现ajax的post请求步骤

    post请求步骤与前篇的get请求步骤差别不大,只是增加了 xhr.setRequestHeader("Content-type","application/x-www- ...

  4. Python自动化开发(三):循环次数控制、常用数据类型、字符串格式化、列表常用操作、列表的后续操作

    计数器的作用可以在死循环中,符合条件的情况下做自动退出中断 #!/usr/bin/env python # _*_ coding: utf-8 _*_ # @Time : 2017/3/14 11:2 ...

  5. hdoj1421(bfs)

    bfs 练习题,简单bfs 题意:给一块地图,找出油田的块的数量,这里要考虑油田的八个方向,上下左右(左右)上(左右)下,存在则可以并在一起.@是油田,*是土地,m是行,n是列. 解题思路:用一个二维 ...

  6. NIO(三、Channel)

    目录 NIO(一.概述) NIO(二.Buffer) NIO(三.Channel) Channel 上文说了描述了Buffer的实现机制,那么这个章节就主要描述数据是如何进入缓冲区的,并且又是如何从缓 ...

  7. Android-自定义控件之时针-霞辉

    注释已经比较详细了,废话就不多说了.贴代码了 时针分针秒钟都做上去了,采用的方法也很简单,仔细看一会就能看懂 自定义View类 package com.xh.mytime; import java.u ...

  8. 简单的android启动跳转页面

    java代码示例: package com.rcl; import android.app.Activity;import android.content.Intent;import android. ...

  9. centos6.5用tomcat安装jenkins

    1下载jdk并安装配置环境变量 # cd /opt/app # .0_45.tar.gz # vi /etc/profile JAVA_HOME=/opt/app/jdk1..0_45 CLASSPA ...

  10. CSS.06 -- 尚合网页模拟

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...