权利声明:转载请注明出处http://blog.csdn.net/hello_chillax/article/details/44992787

今天我们来学习Android中的一个比较好玩的动画效果:Property Animation、でわ、はじめましょう。

一,初めに:动画的分类
Android动画分类:View Animation,Drawable Animation,Property Animation。

各自能实现的效果:View Animation比较简单,能且只能实现View的基本动画效果,如translation(移动),alpha(淡入淡出),rotate(旋转),scale(缩放)。如果你想实现其他的特效的话,就应该考虑使用Property Animation了。

二、次に:Property Animation的简单使用。

1.ObjectAnimator.

.提供了ofInt、ofFloat、ofObject,这几个方法都是设置动画作用的元素、作用的属性、动画开始、结束、以及中间的任意个属性值。
下面我们通过一个Demo来细致地讲一下ObjectAnimator。
首先我们新建一个工程,在main.xml中写一个Button。在main函数中写下如下代码

我们实现这样一个动画:点击Button,让Button向右下角移动一段距离:于是我们有一下四种实现方法。

//实现方法一:animation动画只是有了动画效果,控件本身的位置并未移动TranslateAnimation animationX=new TranslateAnimation(0, 500, 0, 0);TranslateAnimation animationY=new TranslateAnimation(0,0,0,500);AnimationSet set=new AnimationSet(false);set.addAnimation(animationX);set.addAnimation(animationY);set.setDuration(3000);set.setFillAfter(true);button.startAnimation(set);
//实现方法二:   这种方法实际上已经改变了控件的位置!!!ObjectAnimator.ofFloat(button, "translationX", 0F,500F).setDuration(3000).start();ObjectAnimator.ofFloat(button, "translationY", 0F,500F).setDuration(3000).start();
//第三种实现方法: 用PropertyValuesHolder实现动画(比 方法二效率更高)PropertyValuesHolder holder1=PropertyValuesHolder.ofFloat("translationX", 0,500);PropertyValuesHolder holder2=PropertyValuesHolder.ofFloat("translationY", 0,500);ObjectAnimator.ofPropertyValuesHolder(button, holder1,holder2).setDuration(3000).start();
//第四种实现方法:用AnimatorSet实现动画效果,自定义动画执行顺序ObjectAnimator animator1=ObjectAnimator.ofFloat(button, "translationX", 0F,500F);ObjectAnimator animator2=ObjectAnimator.ofFloat(button, "translationY", 0F,500F);AnimatorSet set=new AnimatorSet();set.playTogether(animator1,animator2);//同时播放
//      set.playSequentially(animator1,animator2);//顺序播放
//      set.play(animator1).with(animator2);//同时播放
//      set.play(animator2).after(animator1);//让animator2在animator1后面播放set.setDuration(3000);set.start();

怎么样,我们不仅实现了动画,而且用简短的代码实现了四种方式。

下面我们来看一下对动画事件的监听:
我们让Button移动结束后调用一个Toast,show出“animator over”的 字样.
我们选用方法4来添加监听效果,其他的类似:
添加如下代码:

set.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {Toast.makeText(MainActivity.this, "animator over", Toast.LENGTH_SHORT).show();}@Overridepublic void onAnimationCancel(Animator animation) {}});

当然,如果你感觉这个监听器代码太多,不想实现那么多的方法,你可以用下面这个方法:

set.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {Toast.makeText(MainActivity.this, "animator over", Toast.LENGTH_SHORT).show();}});

是不是简洁多了。。

2.ValueAnimator
下面我们来进入另一个重要的animator。首先,让我们先看一下它和ObjectAnimator的关系:

public final class ObjectAnimator extends ValueAnimator {private static final boolean DBG = false;// The target object on which the property exists, set in the constructor。。。。。。。

显然,ObjectAnimator继承自ValueAnimator,即,ObjectAnimator包装了ValueAnimator;

注意:ValueAnimator本身并不能实现任何动画,它其实是一个产生动画变化的变化值,
下面我们来实现一个功能:让button的text从0随着动画的进度增加到100的效果:添加如下代码:

ValueAnimator animator=ValueAnimator.ofInt(0,100);animator.setDuration(3000);animator.addUpdateListener(new AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {Integer integer=(Integer) animation.getAnimatedValue();button.setText(""+integer);}});animator.start();

ok,就这样了

3.Layout Animation
过渡的类型一共有四种:

LayoutTransition.APPEARING 当一个View在ViewGroup中出现时,对此View设置的动画

LayoutTransition.CHANGE_APPEARING 当一个View在ViewGroup中出现时,对此View对其他View位置造成影响,对其他View设置的动画

LayoutTransition.DISAPPEARING 当一个View在ViewGroup中消失时,对此View设置的动画

LayoutTransition.CHANGE_DISAPPEARING 当一个View在ViewGroup中消失时,对此View对其他View位置造成影响,对其他View设置的动画

LayoutTransition.CHANGE 不是由于View出现或消失造成对其他View位置造成影响,然后对其他View设置的动画。

注意动画到底设置在谁身上,此View还是其他View。

最后,Demo下载地址:http://download.csdn.net/detail/nsgsbs/8525995

帅气的属性动画赏析(Property Animation)相关推荐

  1. Hongyang 生命不息,奋斗不止,万事起于忽微,量变引起质变 目录视图 摘要视图 订阅 Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...

  2. Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...

  3. Android属性动画(Property Animation)

    前言 属性动画系统是一个强大的框架,可以用来为添加几乎各种动画.你可以通过按时间改变对象的属性来定义任何动画,无论这个对象是否被绘制在屏幕内.一个属性动画在特定的时间范围内改变一种属性(也就是一个对象 ...

  4. Android属性动画赏析,Android源码分析—属性动画的工作原理

    前言 本文为Android动画系列的最后一篇文章,通过对源码的分析,能够让大家更深刻地理解属性动画的工作原理,这有助于我们更好地使用属性动画.但是,由于动画的底层实现已经深入到jni层,并且涉及到显示 ...

  5. 这可能是第二好的自定义 View 教程之属性动画

    上期文章镇楼: 这可能是第二好的自定义 View 教程之绘制 凯哥的文章确实写的细而好呀,这不,活生生把 面试系列 先放一放,继续讲解我们的动画. 为啥是第二好? 一看就是没看 前面的文章 的.这里就 ...

  6. Android 系统(196)---Android 属性动画

    Android 属性动画 属性动画 总结&攻略 前言 动画的使用 是 Android 开发中常用的知识 本文将详细介绍 Android 动画中 属性动画的原理 & 使用 动画类型 关于 ...

  7. 秒懂Android属性动画

    自从Android3.0 版本加入属性动画后,在平时的开发中多多少少也使用了,但是从来没有对其做一个系统的分析和总结,最近刚好有点时间,来对这个话题做一个分析和总结. 概述 Android动画体系 引 ...

  8. Android动画之视图动画和属性动画

    Android 动画分为两大类,分别是视图动画(View Animation)和属性动画(Property Animation).对于这两种动画,都能够使用xml和代码的形式定义动画. 注:布局动画相 ...

  9. Android Animation学习(一) Property Animation原理介绍和API简介

    Android Animation学习(一) Property Animation介绍 Android Animation Android framework提供了两种动画系统: property a ...

最新文章

  1. 华为徐文伟:用数学和系统工程方法推进未来网络研究
  2. 金蝶K3很有意义的数字3
  3. 第四节:python if语句用法
  4. cs架构使用webservice靠谱嘛_使用点评eimele亦餐哪些味道的好吃?口碑靠谱吗?急想知道!...
  5. spring-retry----线程内重试
  6. 【转】ABP源码分析十六:DTO的设计
  7. 【CodeForces - 214C 】Game (拓扑排序,思维)
  8. 最IN的云原生架构,阿里云 Serverless 事件总线 EventBridge 重磅发布
  9. Win10系统如何查看电脑是否是UEFI启动模式
  10. sha-1算法的实现 c语言,SHA-1算法的C语言实现
  11. vm虚拟机联网最简单的方式
  12. 一万块是存入支付宝里的余额宝好还是存在微信的零钱通里好?
  13. C语言经典例70-编写求字符串长度函数
  14. sis最新地址获取方法_微信表情悄悄更新,获取最新表情方法!
  15. php获取这星期几,php如何获取星期几
  16. android 画布实现签名,Android实现屏幕手写签名
  17. 中兴跳楼程序员妻子:他们就这样把我老公逼死了
  18. 自动打开html网页脚本,开启网页全屏插件(自动开启网页全屏脚本js插件)
  19. Opcodes 说明
  20. NBA联赛全面暂停!VR直播观赛会跃身主流吗?

热门文章

  1. Java设计模式基础概述
  2. 树莓派 2 和 3 上的 Swift 3.0
  3. linux服务器的杀毒软件,linux系统服务器用什么杀毒软件比较好
  4. 支付宝已支持给微信QQ好友转账
  5. 经常读读可以让自己明心静起
  6. C++定义全局变量的方法
  7. nbtstat命令linux_nbtstat命令基础知识
  8. java获取文件夹下的文件或文件夹
  9. 接入腾讯应用宝(YSDK)注意事项
  10. 绝地求生-通过Actor名字查询ActorId