Android開發藝術探索 第7章 動畫深刻分析

Android動畫能夠分爲三種:View動畫,幀動畫和屬性動畫;屬性動畫爲API11的新特性,在低版本是沒法直接使用屬性動畫的。android

本章主要學習內容:算法

  • 1.View動畫以及自定義View動畫app

  • 2.View動畫的一些特殊使用場景ide

  • 3.對屬性動畫作了一個全面的介紹oop

  • 4.使用動畫的一些注意事項學習


7.1View動畫

  • 1.View動畫的四種變換效果對應着Animation的四個子類:TranslateAnimation(平移動畫)、ScaleAnimation(縮放動畫)、RotateAnimation(旋轉動畫)和AlphaAnimation(透明度動畫),他們既能夠用代碼建立也能夠用XML來定義,推薦使用可讀性更好的XML來定義
  • 2.標籤標示動畫集合,對應AnimationSet類,他能夠包含若干個動畫,而且他的內部也能夠嵌套其餘動畫集合。android:interpolator標示動畫集合所採用的差值器,差值器影響動畫速度,好比非勻速動畫就須要經過差值器來控制動畫的播放過程。android:shareInterpolator表示集合中的動畫是否和集合共享同一個差值器,若是集合不指定差值器,那麼自動化就須要單獨制定所須要的差值器或者默認值。
  • 3.Animation經過setAnimationListener方法能夠給View動畫添加過程監聽
  • 4.自定義View動畫只須要繼承Animation這個抽象類,並重寫initialize和applyTransformation方法,在initialize方法中作一些初始化工做,在applyTransformation中進行相應的矩陣變換,不少時候須要採用Camera來簡化矩陣變換過程。
  • 5幀動畫是順序播放一組預先定義好的圖片,相似電影播放;使用簡單但容易引起OOM,儘可能避免使用過多尺寸較大的圖片。

7.2View動畫的特殊使用場景

  • 1.LayoutAnimation做用於ViewGroup,爲ViewGroup指定一個動畫,當它的子元素出場的時候都會具備這種動畫,ListView上用的多,LayoutAnimation也是一個View動畫。

使用LayoutAnimation

  • 2.Activity/Fragment的切換效果 在startActivity(Intent)或finish()以後調用overridePendingTransition(int enterAnim,int exitAnim)方法。 Fragment也能夠添加切換效果,經過FragmentTransaction中的setCustomAnimations()方法來添加;須要考慮兼容性使用View動畫,屬性動畫是API11新引入的。

7.3屬性動畫

AnimatorSet、ObjectAnimator、TimeAnimator、ValueAnimator動畫

  • 1.屬性動畫能夠對任意對象的屬性進行動畫而不只僅是View,動畫默認間隔300ms,默認幀率10ms/幀。在一個時間間隔內完成對象從一個屬性值到另外一個屬性值的改變。lua

  • 2.android:propertyName表示屬性動畫的做用的屬性的名稱。*線程

    android:duration表示動畫的時長orm

    android:valueFrom表示動畫的起始值

    android:valueTo表示屬性的結束值

    android:startOffset表示動畫的延遲時間,當動畫開始後,須要延遲多少毫秒纔會真正播放次動畫。

    android:repeatCount表示動畫的重複次數(默認爲0,其中-1表示無限循環)

    android:repeatMode表示動畫的重複模式(repeat和reverse可選,表示連續重複和逆向重複)

    android:valueType表示android:propertyName所指定的屬性的類型,可選intType/floatType。若是android:propertyName指定的屬性表示顏色,則不須要指定該屬性。

7.3.2理解差值器和估值器

  • 1.時間差值器(TimeInterpolator)的做用是根據時間流逝的百分比來計算出當前屬性值改變的百分比,系統預置的有LinearIn特rpolator(線性插值器:勻速動畫),AcceletateDecelerateInterpolator(加速減速差值器:動畫兩頭慢中獎快),DecelerateInterpolator(減速差值器:動畫愈來愈慢)

  • 2.估值器(TypeEvaluator)的做用是根據當前屬性改變的百分比來計算改變後屬性值。系統預置有IntEvaluator,FloatEvaluator,ArabEvaluator

  • 3.差值器和估值器除了系統提供以外,咱們還能夠自定義。自定義差值器須要實現Interpolator或者TimeInterpolator;自定義估值器算法須要實現TypeEvaluator

7.3.4對任意屬性作動畫

  • 1.屬性動畫要求做用的對象提供該屬性的get和set方法,缺一不可

  • 2.若是你的對象沒有對應的get和set方法

    • 請給你的對象加上get和set方法,若是你有權限的haul(若是直接使用系統的類,是沒法加上的)

    • 用一個類來包裝原始對象,簡介爲期提供get和set方法

    • 採用ValueAnimator,監聽動畫過程,本身實現屬性的改變

7.3.5屬性動畫的工做原理

經過反射調用get/set方法;屬性動畫須要運行在有Looper的線程中。

7.4使用動畫的注意事項

  • 1.使用幀動畫時,當圖數量較多且圖片分辨率較大的時候容易出現OOM,需注意,儘可能避免使用幀動畫
  • 2.使用無限循環動畫的時候,在Activity退出時及時中止,不然將致使Activity沒法釋放從而形成內存泄漏
  • 3.View動畫View的影像作動畫,並非真正的改變了View的狀態,所以有時會出現動畫完成後View沒法隱藏(setVisibility(View.Gone)失效),這時候調用view.clearAnimation()清理View動畫便可解決
  • 4.不要使用px,使用px會致使不一樣設備上有不一樣的效果
  • 5.View動畫是對View的影像作動畫,View的真實位置沒有變更,也就致使點擊View動畫後的位置觸摸事件不會響應,屬性動畫不存在這個問題
  • 6.使用動畫的過程當中,使用硬件加速能夠提升動畫的流暢度
  • 7.動畫在3.0如下的系統存在兼容性問題,特殊場景可能沒法正常工做,須要作好適配工做。
相關文章
相關標籤/搜索