本文参考Android属性动画完全解析(上),初识属性动画的基本用法

android3.0之前一共有两种动画,分别是frame动画和tween动画,关于这两种动画如果不了解可以查看我之前的文章android之frame动画详解android之tween动画详解 ,frame动画就是逐帧动画,把多张图片放在一起连续播放实现一种类似于gif图片的动画效果,tween动画就是补间动画,主要是对图像进行平移,缩放,旋转,改变透明度等。然而tween动画有很大的局限性,我们看看官方文档:

tween动画被称作View Animation,第一句就说的很清楚了,你可以使用View Animation System 来在View上实现tween动画。也就是说tween动画只能作用在view上,可是如果我们想变换一个自定义View的颜色该怎么办?抱歉,tween无法做到。

android3.0推出了一种新的动画实现方式,那就是属性动画,属性动画,顾名思义,就是作用在View的属性上,我们可以让View的属性实现动画效果。

说到这里我们不得不介绍ObjectAnimator类,这个也是在实际开发中用的最多的,追根溯源,我们发现ObjectAnimator继承自ValueAnimator,ValueAnimator可以帮助我们实现一些简单的数值的变化,不过到目前为止还没用上这个东东。

下面我们先来看看怎么使用属性动画来实现tween动画效果:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "alpha", 1f,
0.5f);
animator.setDuration(5000);
animator.start();

我们通过ofFloat方法来获得一个ObjectAnimator实例,先看看该方法的源码:

    public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) {
ObjectAnimator anim = new ObjectAnimator(target, propertyName);
anim.setFloatValues(values);
return anim;
}

从源码中可以看到该方法接收N个参数,第一个是我们要设置动画的对象,第二个参数给哪个属性设置动画,后面两个参数表示控件从不透明变为半透明,后面的参数可以传N多个,比如

ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "alpha", 1f,
0.5f,1f,0f);

表示控件从不透明到半透明再到不透明,最后到全透明这样一个状态。有了这个例子之后,我想要实现其他tween动画实现的效果都不是问题了。

旋转:

ObjectAnimator animator2 = ObjectAnimator.ofFloat(tv2, "rotation",
0f, 360f);
animator2.setDuration(5000);
animator2.start();

平移:

float curTranslationX = tv.getTranslationX();
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,
"translationX", curTranslationX, -1000f, curTranslationX);
animator.setDuration(3000);
animator.start();

如果要实现组合动画效果呢?

ObjectAnimator moveIn = ObjectAnimator.ofFloat(tv, "translationX",
-500f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(tv, "rotation", 0f,
360f);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(tv, "alpha", 1f,
0f, 1f);
AnimatorSet animSet = new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn);
animSet.setDuration(5000);
animSet.start();

哈哈,还是很简单吧。

这里有一个需要注意的地方就是:


    // after(Animator anim) 现有动画在传入的动画之后执行
// after(long delay) 现有动画延迟指定毫秒后执行
// before(Animator anim) 现有动画在传入的动画之前执行
// with(Animator anim) 现有动画和传入的动画同时执行

当然,属性动画和tween动画一样,即可以使用代码实现也可以使用xml来实现,那么我们看看怎么通过xml文件来实现属性动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially" > <objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:valueFrom="-1000"
android:valueTo="0"
android:valueType="floatType" >
</objectAnimator> <set android:ordering="together" >
<objectAnimator
android:duration="3000"
android:propertyName="rotation"
android:valueFrom="0"
android:valueTo="360"
android:valueType="floatType" >
</objectAnimator> <set android:ordering="sequentially" >
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType" >
</objectAnimator>
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" >
</objectAnimator>
</set>
</set> </set>

android:ordering的值为together表示各个维度的变化同时发生,缺省值也是together,sequentially表示动画依次发生。

基本上就是这样。

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

android使用属性动画代替补间动画的更多相关文章

  1. Android动画总结#补间动画(Tween Animation/View Animation) #帧动画(Frame Animation/Drawable Animation)#属性动画(PropertyAnimation)

    1.共有三种动画,英文名字多种叫法如下 第一种动画:补间动画(Tween Animation/View Animation) 四个:RotateAnimation旋转. AlphaAnimation透 ...

  2. Android中的帧动画与补间动画的使用

    前言 在日常开发中,我们有时候须要一些好看的动画效果,这时能够充分利用Android提供的这几种动画来实现. Android提供了3种类型的动画: 补间动画:补间动画能够应用于View,让你能够定义一 ...

  3. Android动画系列之帧动画和补间动画

    原文首发于微信公众号:jzman-blog,欢迎关注交流! Android 提供三种动画:帧动画.补间动画和属性动画,本篇文章介绍帧动画以及补间动画的使用,属性动画的使用将在后面的文章中分享,那就来复 ...

  4. View动画(补间动画)

    补间动画的属性 Animation的属性 JAVA方法 XML属性 解释 setDetachWallpaper(boolean) android:detachWallpaper 是否在壁纸上运行 se ...

  5. android104 帧动画,补间动画,属性动画

    ##帧动画FrameAnimation* 多张图片快速切换,形成动画效果* 帧动画使用xml定义 package com.itheima.frameanimation; import android. ...

  6. Android基础笔记(十)- 帧动画、补间动画具体解释、对话框

    帧动画 补间动画Tween Animation 对话框以及面试中的注意点 帧动画 帧动画非常easy,我们首先看一下Google官方解释This is a traditional animation ...

  7. 【Android - 进阶】之Animation补间动画

    补间动画也叫View动画,它只能针对View进行动画操作,且补间动画操作的只是View中可见的部分,即只操作界面,对于可点击区域等都不会进行操作. 在Android中,补间动画的顶级类是Animati ...

  8. android 学习随笔二十五(动画:补间动画)

    补间动画(TweenAnimation) * 原形态变成新形态时为了过渡变形过程,生成的动画就叫补间动画(为了让对象从初始状态向结束状态改变的过程更加自然而自动生成的动画效果)* 位移.旋转.缩放.透 ...

  9. 012 Android 动画效果(补间动画) +去掉App默认自带的标题+更改应用的图标

    1.介绍 补间动画开发者只需指定动画开始,以及动画结束"关键帧", 而动画变化的"中间帧"则由系统计算并补齐! 2.去掉App的标题 (1)将AndroidMa ...

随机推荐

  1. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  2. 字符编码:ANSI,ASCII,GB2312,GBK,Big5,Unicode和UTF-8

    整理自字符编码笔记:ASCII,Unicode和UTF-8 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进 ...

  3. Cloud Test 在手,宕机时让您不再措手不及

    1月28日,Github 上午 10:04 分宕机了,导致全球各地的用户不能访问.官方回复可能是网络中断引起的,到 10:28 分已经可以正常访问. 对于互联网公司来说,一旦宕机就会措手不及,如何才能 ...

  4. ANDROID_MARS学习笔记_S04_008_用Listview、自定义adapter显示返回的微博数据

    一.简介 运行结果 二.代码1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"? ...

  5. Android实战之你应该使用哪个网络库?

    前言 目前基本上每个应用都会使用HTTP/HTTPS协议来作为主要的传输协议来传输数据.即使你没有直接使用HTTP协议,也会有成堆的SDK会包含这些协议,譬如分析.Crash反馈等等.当然,目前也有很 ...

  6. java 常量池

    在jvm规范中,每个类型都有自己的常量池.常量池是某类型所用常量的一个有序集合,包括直接常量(基本类型,String)和对其他类型.字段.方法的符号引用.之所以是符号引用而不是像c语言那样,编译时直接 ...

  7. 轻松学习RSA加密算法原理 (转)

    轻松学习RSA加密算法原理 (转) http://blog.csdn.net/q376420785/article/details/8557266 http://www.ruanyifeng.com/ ...

  8. 数据表列名与数据库关键字冲突,在Hibernate下的解决办法

    设计了一个数据库,某一个列名字是key,这与mysql数据库关键字冲突了,Hibernate下save总是报错. 在mysql命令中,解决办法很简单,只需要将关键字key用引号括起来就好了. 在Hib ...

  9. C#数据库连接字符串

    转自:http://blog.csdn.net/xiaokexinger/article/details/1541441 在MSDN中,.net的数据库连接字符串都有详细的说明,我这里以代码范例的方式 ...

  10. HDU-3719 二叉搜索树

    http://acm.hdu.edu.cn/showproblem.php?pid=3791 用数组建立二叉树: 二叉搜索树 Time Limit: 2000/1000 MS (Java/Others ...