Android 中的動畫 Animation
一, 概要
android3.0之前 執行兩種動畫, 幀動畫 和 補間動畫
android3.0之後 引入了一個新的動畫: 屬性動畫
二,分類
幀動畫 Frame
補間動畫 Tween
透明度補間動畫
縮放補間動畫
旋轉補間動畫
移動補間動畫
屬性動畫 Property
三, 幀動畫 Frame Drawable Animation <一組圖片> GIF文件
每一張靜止的圖片顯示出來, 利用人眼睛的錯覺, 得出的動畫
創建方式
1, 資源文件創建方式
1.1 在res中創建drawable文件夾
1.2 創建動畫的文件 ***.xml 標籤: <animation-list/>
1.3 在代碼中或者在佈局頁面中, 設置ImageView的背景動畫資源 android:background=""
1.4 獲得AnimationDrawable動畫管理器, 調用start() 開始播放動畫, 調用stop()停止播放
2, java代碼創建方式
2.1 在代碼中獲得AnimationDrawable動畫管理器
2.2 向動畫管理器中添加動畫
2.3 爲圖片設置動畫
2.4 調用AnimationDrawable中start() 開始播放動畫, 調用stop() 停止播放
3, 設置動畫播放的次數
//if true: 執行一次 , if false: 重複執行
drawable.setOneShot(false);
四, 補間動畫
補充中間的動畫
開發者只需要設置開始和結束的動畫, 中間的動畫是由系統計算補齊
主要分爲: 透明度/ 縮放/ 旋轉/ 平移 / set(集合)
創建方式:
1, 資源文件中
存放的目錄: res/anim/
<alpha /> 透明度
<scale /> 縮放
<Rotate /> 旋轉
<Translate /> 平移
<set /> 組合動畫
步驟:
在res/anim/ 創建xml的資源文件
在java代碼中 startAnimation(AnimationUtils.londAnimation(上下文對象,anim的資源文件id));
2, java代碼中
2.1 得到Animation對象
2.2 爲控件啓動動畫
五, 爲Activity的切換添加動畫
//爲Activity添加動畫
/**
* enterAnim 進入的動畫
* exitAnim 出去的動畫
*/
overridePendingTransition(R.anim.anim01, R.anim.anim02);
六, 屬性動畫 Property 3.0後出現 增強版補間動畫
存放的文件夾: res/animator/***.xml
屬性動畫和補間動畫區別
1, 補間動畫可以設置4個方向的動畫, 屬性動畫指定任意動畫
2, 補間動畫是針對UI控件執行的動畫, 屬性動畫是針對對象進行的動畫
3, 補間動畫移動後, 控件的實際位置沒有變化 ; 屬性動畫會隨着位置的變化而變化
屬性名稱:
位移: translationX translationY
旋轉: rotation rotationX ratationY
縮放: scaleX scaleY
透明度: alpha
創建方式
1, xml的方式
1.1 res中創建文件夾 animator, 並且在文件夾中創建.xml的文件 <objectAnimator/>
1.2 在代碼中加載資源文件中的動畫
ObjectAnimator animator = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.anim_scalex);
1.3 設置要執行該動畫的對象
animator.setTarget(iv);
1.4 啓動動畫
animator.start();
2, 代碼的方式
單個動畫:
ObjectAnimator animator = ObjectAnoimator.ofFloat(目標對象,屬性名稱,可變參數的值);
animator.start();
集合:
AnimatorSet set = new AnimatorSet();
//定義每個動畫
ObjectAnimator animator1 = ObjectAnoimator.ofFloat(目標對象,屬性名稱,可變參數的值);
ObjectAnimator animator2 = ObjectAnoimator.ofFloat(目標對象,屬性名稱,可變參數的值);
List<Animator> list = new ArrayList<Animator>();
list.add(animator1);
list.add(animator2);
//把動畫添加到集合中
set.playSequentially(list);//依次執行
//set.playTogether(list);//一起執行
//第二種方式
//set.play(animator1).with(animator2); 一起執行
//play() with() after() before()
set.start();
監聽器:
alphaAnimator.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
// TODO 動畫開始時, 執行
}
@Override
public void onAnimationRepeat(Animator animation) {
// TODO 動畫重複的時候, 執行
}
@Override
public void onAnimationEnd(Animator animation) {
// TODO 動畫結束時,執行
}
@Override
public void onAnimationCancel(Animator animation) {
// TODO 動畫取消時執行
}
});