做网站工资多少钱,网站开发国内外现状研究,深圳全网推广托管,百度seo优化推广软件1.介绍 Android3.0推出了全新的AnimationAPI#xff0c;使用起来很方便#xff0c;但是不能在3.0以下版本使用#xff0c;NineOldAndroids是一个可以在任意Android版本上使用的AnimationAPI#xff0c;API和Android3.0中的类似。 2.常用类 ObjectAnimator ValueAnimator A… 1.介绍 Android3.0推出了全新的AnimationAPI使用起来很方便但是不能在3.0以下版本使用NineOldAndroids是一个可以在任意Android版本上使用的AnimationAPIAPI和Android3.0中的类似。 2.常用类 ObjectAnimator ValueAnimator AnimatorSet ViewPropertyAnimator 类名与官方的API是对应的只是包名为com.nineoldandroids.animation。 3.使用方法 首先导入NineOldAndroids的jar包。在Android3.0中View中有一个animate方法NineOldAndroids中提供了ViewPropertyAnimator.animate(View)与其对应可以选择静态导入。 // 官方API3.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() {Overridepublic void onAnimationStart(Animator animation) {super.onAnimationStart(animation);// 动画开始}Overridepublic void onAnimationCancel(Animator animation) {super.onAnimationCancel(animation);// 动画取消}Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);// 动画结束}Overridepublic 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 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可以使用多个ObjectAnimator实现复杂的动画效果。 AnimatorSet主要方法有两个playSequentially 是创建按顺序执行的动画playTogether是创建同时执行的动画。 5.ObjectAnimator说明 ObjectAnimator是动画对象通过ObjectAnimator提供的一系列of开头的静态方法创建。 创建一般需要传入三个参数 targetObject类型可不是View哦 PropertyNameString类型或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 APIhttp://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html Android官方文档http://developer.android.com/reference/android/view/animation/package-summary.html