Android之开源框架NineOldAndroids动画库
1.介紹
Android3.0推出了全新的AnimationAPI,使用起來很方便,但是不能在3.0以下版本使用,NineOldAndroids是一個可以在任意Android版本上使用的AnimationAPI,API和Android3.0中的類似。
2.常用類
- ObjectAnimator
- ValueAnimator
- 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() {@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開頭的靜態方法創建。
創建一般需要傳入三個參數
- 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
總結
以上是生活随笔為你收集整理的Android之开源框架NineOldAndroids动画库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之玩转MPAndroidC
- 下一篇: Android之判断网络状态(网络的连接