Android_开源框架_NineOldAndroids动画库
2014-07-02 15:45
429 查看
1.介绍
Android3.0推出了全新的AnimationAPI,使用起来很方便,但是不能在3.0以下版本使用,NineOldAndroids是一个可以在任意Android版本上使用的AnimationAPI,API和Android3.0中的类似。
2.常用类
ObjectAnimatorValueAnimator
AnimatorSet
ViewPropertyAnimator
类名与官方的API是对应的,只是包名为
com.nineoldandroids.animation。
3.使用方法
首先导入NineOldAndroids的jar包。在Android3.0中,View中有一个
animate方法,NineOldAndroids中提供了
ViewPropertyAnimator.animate(View)与其对应,可以选择静态导入。
// 官方API(3.0以上) mView.animate().setDuration(5000).rotationY(720).x(100).y(100).start(); // NineOldAndroids ViewPropertyAnimator.animate(mView).setDuration(5000) .rotationY(720).x(100).y(100).start(); // 可以使用静态导入 import static com.nineoldandroids.view.ViewPropertyAnimator.animate; // 直接调用animate方法 animate(mView).setDuration(5000).rotationY(720).x(100).y(100).start();
使用链式编程设置各种属性参数,最终调用
start()来启动动画,还可以调用
setStartDelay()设置动画延迟启动。
可以设置动画的监听器,在动画开始、结束等时候加一些处理。
ViewPropertyAnimator .animate(mIView) .setDuration(5000) .rotationY(720) .x(100).y(100) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); // 动画开始 } @Override public void onAnimationCancel(Animator animation) { super.onAnimationCancel(animation); // 动画取消 } @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); // 动画结束 } @Override public void onAnimationRepeat(Animator animation) { super.onAnimationRepeat(animation); // 动画重复启动 } }).start();
ViewPropertyAnimator对象提供了取消动画的方法
ViewPropertyAnimator animate = ViewPropertyAnimator.animate(mDropTv); /* ... */ animate.start(); // 开始动画 animate.cancel(); // 取消动画
简单的动画效果使用
ViewPropertyAnimator一般可以满足,下面介绍一下高级玩法。核心是
ObjectAnimator类。
4.举例
背景颜色从红色到蓝色,并反转回去,而且无限重复。ValueAnimator colorAnim = ObjectAnimator.ofInt(mView, "backgroundColor", /*红色*/0xFFFF8080, /*蓝色*/0xFF8080FF); colorAnim.setDuration(3000); colorAnim.setEvaluator(new ArgbEvaluator()); // ARGB colorAnim.setRepeatCount(ValueAnimator.INFINITE); // 无限重复 colorAnim.setRepeatMode(ValueAnimator.REVERSE); // 反转回去 colorAnim.start();
使用动画集合
AnimatorSet,可以使用多个
ObjectAnimator,实现复杂的动画效果。
AnimatorSet set = new AnimatorSet(); set.playTogether( ObjectAnimator.ofFloat(myView, "rotationX", 0, 360), ObjectAnimator.ofFloat(myView, "rotationY", 0, 180), ObjectAnimator.ofFloat(myView, "rotation", 0, -90), ObjectAnimator.ofFloat(myView, "translationX", 0, 90), ObjectAnimator.ofFloat(myView, "translationY", 0, 90), ObjectAnimator.ofFloat(myView, "scaleX", 1, 1.5f), ObjectAnimator.ofFloat(myView, "scaleY", 1, 0.5f), ObjectAnimator.ofFloat(myView, "alpha", 1, 0.25f, 1) ); set.setDuration(5 * 1000).start();
AnimatorSet主要方法有两个,
playSequentially是创建按顺序执行的动画,
playTogether是创建同时执行的动画。
5.ObjectAnimator说明
ObjectAnimator是动画对象,通过ObjectAnimator提供的一系列of开头的静态方法创建。
创建一般需要传入三个参数
target,Object类型,可不是View哦
PropertyName,String类型或Property类型,用于描述target中的属性
数组,
ofInt()就是int数组
ObjectAnimator原理是这样的:会调用
target的
set方法,设置
PropertyName的值,这个值的计算方式是,根据Duration时长和第三个参数数组来计算出来当前时间的值。然后调用
set方法设置进去。例如上面更改背景颜色的实例,
PropertyName是
backgroundColor,数组是两个颜色值,运行动画就会根据Duration计算当前的颜色值,调用
target的
setBackgroundColor方法设置进去,从而改变了背景颜色。
再看改
AnimatorSet的实例,
PropertyName是
rotationX、
translationX之类的,这几个属性是在Android3.0以上才有的,所以调用
set方法会出错的,通过观察
ObjectAnimator,发现对这几个属性做了特殊处理,提前预制了这几个属性值。
static { PROXY_PROPERTIES.put("alpha", PreHoneycombCompat.ALPHA); PROXY_PROPERTIES.put("pivotX", PreHoneycombCompat.PIVOT_X); PROXY_PROPERTIES.put("pivotY", PreHoneycombCompat.PIVOT_Y); PROXY_PROPERTIES.put("translationX", PreHoneycombCompat.TRANSLATION_X); PROXY_PROPERTIES.put("translationY", PreHoneycombCompat.TRANSLATION_Y); PROXY_PROPERTIES.put("rotation", PreHoneycombCompat.ROTATION); PROXY_PROPERTIES.put("rotationX", PreHoneycombCompat.ROTATION_X); PROXY_PROPERTIES.put("rotationY", PreHoneycombCompat.ROTATION_Y); PROXY_PROPERTIES.put("scaleX", PreHoneycombCompat.SCALE_X); PROXY_PROPERTIES.put("scaleY", PreHoneycombCompat.SCALE_Y); PROXY_PROPERTIES.put("scrollX", PreHoneycombCompat.SCROLL_X); PROXY_PROPERTIES.put("scrollY", PreHoneycombCompat.SCROLL_Y); PROXY_PROPERTIES.put("x", PreHoneycombCompat.X); PROXY_PROPERTIES.put("y", PreHoneycombCompat.Y); }
6.总结
NineOldAndroids的API与官方的API基本一致,使用很方便。能够轻松实现各种酷炫动画效果。一般情况使用
ViewPropertyAnimator就可以了,可以设置动画监听器,实现连贯动画,和其他处理。
ObjectAnimator创建的
target是
Object,可以传入任何对象,原理是调用
set方法,利用这个特性可以实现很多自定义的效果有点和
Scroller类似。
7.参考
Github主页:https://github.com/JakeWharton/NineOldAndroids官方网站:http://nineoldandroids.com/
ListView动画库:https://github.com/nhaarman/ListViewAnimations
Android3.0 API:http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html
Android官方文档:http://developer.android.com/reference/android/view/animation/package-summary.html
相关文章推荐
- nineoldandroids动画开源框架的使用
- Android开源动画框架:NineOldAndroids
- Android 开源动画框架 NineOldAndroids
- Android 开源动画框架:NineOldAndroids
- Android动画进阶—使用开源动画库nineoldandroids
- Android动画进阶—使用开源动画库nineoldandroids
- Android--开源动画库nineoldandroids
- 关于github上开源nineoldandroids兼容动画的笔记
- Android开源动画库nineoldandroids
- 第三方开源库:nineoldandroids右弹出有动画
- Android动画进阶—使用开源动画库nineoldandroids
- 关于github上开源nineoldandroids兼容动画的笔记
- Android动画进阶—使用开源动画库nineoldandroids
- Android-个性通知(开源niftynotification,eclipse实现调用,nineoldandroids动画)
- Android开源NineOldAndroids
- Android 开源项目NineOldAnimations详解
- Android-25种开源炫酷动画框架
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
- NineOldAndroids开源项目:ViewHelper
- android gif动画开源框架android-gif-drawable