Android動畫深入分析
1 View動畫
(1)android動畫分為view動畫、幀動畫和屬性動畫,屬性動畫是API 11(Android 3.0)的新特性,幀動畫一般也認為是view動畫。
(2)AnimationSet
的屬性android:shareInterpolator
表示集合中的動畫是否共享同一個插值器,如果集合不指定插值器,那麼子動畫需要單獨指定所需的插值器或者使用預設值。
(3)自定義動畫需要繼承Animation
抽象類,並重新它的initialize
和applyTransformation
方法,在initialize方法中做一些初始化工作,在applyTransformation方法中進行相應的矩陣變換,很多時候需要採用Camera
類來簡化矩陣變換的過程。
(4)幀動畫使用比較簡單,但是容易引起OOM,所以在使用的時候應儘量避免使用過多尺寸較大的圖片。
2 view動畫的特殊使用場景
(1)佈局動畫(LayoutAnimation
)屬性分析
<layoutAnimation xmlns:android="" android:delay="0.5" android:animationOrder="reverse" android:animation="@anim/anim_item"/> |
android:delay
:表示子元素開始動畫的時間延遲,比如子元素入場動畫的時間週期是300ms,那麼0.5表示每個子元素都需要延遲150ms才能播放入場動畫。
給ViewGroup指定LayoutAnimation的兩種方式
//xml android:layoutAnimation="xxx" //java Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_item); LayoutAnimationController controller = new LayoutAnimationController(animation); controller.setDelay(0.5f); controller.setOrder(LayoutAnimationController.ORDER_NORMAL); listView.setLayoutAnimation(controller); |
(2)Activity切換效果
在startActivity方法後或者finish方法之後呼叫overridePendingTransition(int inAnim, int outAnim)
方法設定進入或者退出的動畫效果。
還有其他方式可以給Activity新增切換動畫效果,但是往往有相容性限制,參見。
3 屬性動畫
(1)屬性動畫可以對任意物件的屬性進行動畫而不僅僅是view,動畫預設的時間間隔是300ms
,預設幀率是10ms/幀
。
(2)屬性動畫幾乎是無所不能,但是它是從API 11才有的,所以存在相容性問題,可以考慮使用開源動畫庫。它的功能和系統原生的android.animations.*
中的類的功能完全一致,使用方法也是完全一樣,只要我們用nineoldandroids編寫動畫,那麼就能執行在所有的android系統上。
(3)屬性android:repeatMode
表示動畫的重複模式,repeat
表示連續重複播放,reverse
表示逆向重複播放,也就是第一次播放完後第二次倒著播放動畫,第三次還是重頭開始播放動畫,第四次再倒著播放,以此類推。
(4)插值器和估值器:屬性動畫實現非勻速動畫的重要手段
時間插值器(TimeInterpolator
)的作用是根據時間流逝的百分比計算出當前屬性值改變的百分比,系統內建的插值器有線性插值器(LinearInterpolator
)、加速減速插值器(AccelerateDecelerateInterpolator
)和減速插值器(DecelerateInterpolator
)。
型別估值器(TypeEvaluator
)的作用是根據當前屬性改變的百分比計算出改變後的屬性值,系統內建的估值器有IntEvaluator
、FloatEvaluator
和ArgbEvaluator
。
(5)動畫監聽器AnimatorListener
:監聽動畫的開始、結束、取消以及重複播放;AnimatorUpdateListener
:監聽動畫的整個過程,動畫每播放一幀的時候onAnimationUpdate
方法就會被回撥一次。
(6)對任意屬性做動畫的方法:封裝原始物件或者ValueAnimator
(7)屬性動畫的工作原理:屬性動畫需要執行在有Looper的執行緒中,反射呼叫get/set方法
4 使用動畫的注意事項
(1)OOM:儘量避免使用幀動畫,使用的話應儘量避免使用過多尺寸較大的圖片;
(2)記憶體洩露:屬性動畫中的無限迴圈動畫需要在Activity退出的時候及時停止,否則將導致Activity無法釋放而造成記憶體洩露。view動畫不存在這個問題;
(3)相容性問題:某些動畫在3.0以下系統上有相容性問題;
(4)view動畫的問題:view動畫是對view的影像做動畫,並不是真正的改變view的狀態,因此有時候動畫完成之後view無法隱藏,即setVisibility(View.GONE)
失效了,此時需要呼叫view.clearAnimation()
清除view動畫才行。
(5)不要使用px;
(6)動畫元素的互動:在android3.0以前的系統上,view動畫和屬性動畫,新位置均無法觸發點選事件,同時,老位置仍然可以觸發單擊事件。從3.0開始,屬性動畫的單擊事件觸發位置為移動後的位置,view動畫仍然在原位置;
(7)硬體加速:使用動畫的過程中,建議開啟硬體加速,這樣會提高動畫的流暢性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4650/viewspace-2816094/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android開發藝術探索 第7章 動畫深入分析Android動畫
- Android動畫Android動畫
- android 動畫Android動畫
- Android 動畫之屬性動畫Android動畫
- [android]android許可權體系深入分析Android
- Android 動畫詳解:屬性動畫、View 動畫和幀動畫Android動畫View
- 【Android 動畫】動畫詳解之屬性動畫(三)Android動畫
- 【Android 動畫】動畫詳解之補間動畫(一)Android動畫
- 【Android 動畫】動畫詳解之屬性動畫(五)Android動畫
- android動畫——屬性動畫(Property Animation)Android動畫
- android 動畫 ——檢視動畫(View Animation)Android動畫View
- Android屬性動畫:動畫流控制Android動畫
- Android之動畫Android動畫
- Android 動畫初探Android動畫
- Android 動畫原理Android動畫
- [android]androidActivity生命週期深入分析Android
- [android]android5大基礎元件深入分析Android元件
- Android 動畫實現Android動畫
- Android 轉場動畫Android動畫
- Android 幀動畫使用Android動畫
- Android 補間動畫Android動畫
- android屬性動畫Android動畫
- Android:動畫詳解Android動畫
- Android動畫的理解Android動畫
- Android動畫小結Android動畫
- Android動畫全解Android動畫
- Android VectorDrawable SVG 動畫AndroidSVG動畫
- 一窺 Android 動畫Android動畫
- android 動畫原理二Android動畫
- Android Transition(Android過渡動畫)Android動畫
- Android備忘錄《View動畫(補間動畫)》AndroidView動畫
- Android動畫效果之Tween Animation(補間動畫)Android動畫
- Android動畫效果之Frame Animation(逐幀動畫)Android動畫
- 【Android 動畫】動畫詳解之插值器(二)Android動畫
- Android動畫:行雲流水的向量圖示動畫Android動畫
- Android動畫效果之初識Property Animation(屬性動畫)Android動畫
- Android View動畫和屬性動畫簡單解析:AndroidView動畫
- Android全套動畫使用技巧Android動畫