1. Android 平台提供了一套完整的動畫架構,使得開發人員可以用它來開發各種動畫效果,
不同Activity切換,不同View之間切換,Layout, 顯示列表,顯示表格都可以使用動畫效果
android 2.2之前 Android 中 Animation 資源可以分為兩種:
Tween Animation: 對單個映像進行各種變換(縮放,平移,旋轉等)來實現動畫。
Frame Animation :由一組映像順序顯示顯示動畫,順序播放事先做好的映像,如電影。
android 3.0(API level 11)後Animation 增加了property animation.
2.tween animation
tween animation又稱view animation,其只能應用與View對象。
View Animation就是一系列View形狀的變換,如大小的縮放,透明度的改變,位置的改變,動畫的定義既可以用代碼定義也可以用XML定義
用xml定義View Animation,放在/res/anim檔案夾下,
3. Property Animation
屬性動畫,這個是在Android 3.0中才引進的,而且是官方建議優先使用的方法,其更靈活,提供更多的特性,而且不像View Animation只能用在view上,屬性動畫可以即應用於view也可以應用與非view.
Property Animation中,改變的是對象的實際屬性,如Button的縮放,Button的位置與大小屬性值都改變了。而且Property Animation不止可以應用於View,還可以應用於任何對象。Property Animation只是表示一個值在一段時間內的改變,當值改變時要做什麼事情完全是你自己決定的。
在Property Animation中,可以對動畫應用以下屬性:
Duration:動畫的期間
TimeInterpolation:屬性值的計算方式,如先快後慢
TypeEvaluator:根據屬性的開始、結束值與TimeInterpolation計算出的因子計算出目前時間的屬性值
Repeat Country and behavoir:重複次數與方式,如播放3次、5次、無限迴圈,可以此動畫一直重複,或播放完時再反向播放
Animation sets:動畫集合,即可以同時對一個對象應用幾個動畫,這些動畫可以同時播放也可以對不同動畫設定不同開始位移
Frame refreash delay:多少時間重新整理一次,即每隔多少時間計算一次屬性值,預設為10ms,最終重新整理時間還受系統進程調度與硬體的影響
4. tween animation原理分析
Animation 和 Transformation,這兩個類是實現動畫的主要的類,Animation 中主要定義了動畫的一些屬性比如開始時間、期間、是否重複播放等,這個類主要有兩個重要的函數:getTransformation 和 applyTransformation,在 getTransformation 中 Animation 會根據動畫的屬性來產生一系列的差值點,然後將這些差值點傳給 applyTransformation,這個函數將根據這些點來產生不同的 Transformation,Transformation
中包含一個矩陣和 alpha 值,矩陣是用來做平移、旋轉和縮放動畫的,而 alpha 值是用來做 alpha 動畫的(簡單理解的話,alpha 動畫相當於不斷變換透明度或顏色來實現動畫),以上面的平移矩陣為例子,當調用 dispatchDraw 時會調用 getTransformation 來得到當前的 Transformation,所以具體的動畫只需要重載 applyTransformation 這個函數即可,
使用者可以定義自己的動畫類,只需要繼承 Animation 類,然後重載 applyTransformation 這個函數。對動畫來說其行為主要靠差值點來決定的,比如,我們想開始動畫是逐漸加快的或者逐漸層慢的,或者先快後慢的,或者是勻速的,這些功能的實現主要是靠差值函數來實現的,Android 提供了 一個 Interpolator 的基類,你要實現什麼樣的速度可以重載其函數 getInterpolation,在 Animation 的 getTransformation 中產生差值點時,會用到這個函數。