日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之开源框架NineOldAndroids动画库

發布時間:2023/12/4 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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动画库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。