Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 動畫系列之補間(Tween)動畫詳解

Android 動畫系列之補間(Tween)動畫詳解

編輯:關於Android編程

前言

上一篇博客中寫了逐幀動畫(Frame)的使用,Android中除了支持逐幀動畫(Frame)之外,也提供了對補間(Tween)動畫的支持。補間動畫就是指開發者只需要指定動畫的開始、結束等“關鍵幀”,而動畫的變化的“中間幀”則由系統計算並補齊。這也是“補間”二字的來意。

補間動畫對應的類是:Animation。由於Animation是個抽象類,所以我們在使用的時候需要使用它的子類,補間動畫的繼承關系見下圖:

這裡寫圖片描述
Java類名 XML關鍵字 描述信息 ScaleAnimation 漸變尺寸伸縮動畫效果 TranslateAnimation 畫面轉換位置移動動畫效果 AnimationSet 一個持有alpah、scale、translate、rotate或者其他set元素的容器 AlphaAnimation 漸變透明度動畫效果 RotateAnimation 畫面轉移旋轉動畫效果

接下來詳細的介紹一下補間動畫的使用。

開發環境

IDE版本:AndroidStudio2.0 物理機版本:Win7旗艦版(64位)

補間動畫的屬性

Animation的屬性

JAVA方法 XML屬性 解釋 setDetachWallpaper(boolean) android:detachWallpaper 是否在壁紙上運行 setDuration(long) android:duration 設置動畫持續時間,單位為毫秒 setFillAfter(boolean) android:fillAfter 控件動畫結束時控件是否保持動畫最後狀態 setFillBefore(boolean) android:fillBefore 控件動畫結束時控件是否還原到開始動畫前的狀態 setFillEnable(boolean) android:fillEnable(boolean) 與android:fillBefore效果相同 setInterpolator(boolean) android:interpolator 設置插值器(指定的動畫效果,如:回彈等) setRepeatCount(int) android:repeatCount 重復次數 setRepeatMode(int) android:repeatMode 重復類型:reverse倒序回放、restart從頭播放 setStartOffset(long) android:startOffset 調用start函數後等待開行運行的時間,單位為毫秒 setZadjustment(int) android:zAdjustment 表示被設置動畫的內容運行時在Z軸的位置(top/bottom/normal),默認為normal

由於Animation類是其抽象父類,那麼我們在使用補間動畫無論是哪一種都已經具備了以上屬性。
下面是每一種補間動畫的特有屬性:

Alpha屬性

JAVA方法 XML屬性 解釋 AlphaAnimation(float fromAlpha,…) android:fromAlpha 動畫開始的透明度(0.0到1.0,0.0是全透明,1.0是不透明) AlphaAnimation(…, float toAlpha) androdi:toAlpha 動畫結束的透明度(同上)

Rotate屬性

JAVA方法 XML屬性 解釋 RotateAnimation(float fromDegrees, …) android:fromDegress 旋轉開始角度,正代表順時針度數,負代表逆時針度數 RotateAnimation(…, float toDegress) android:toDegress 旋轉結束角度(同上) RotateAnimation(…, …, float pivotX, …) android:pivotX 縮放起點X坐標(數值、百分數、百分數p,譬如50表示以當前View左上角坐標加50px為初始點、50%表示以當前View的左上角加上當前View寬高的50%做為初始點、50%p表示以當前View的左上角加上父控件寬高的50%做為初始點) RotateAnimation(…, …, …, pivotY) android:pivotY 縮放起點Y坐標(同上)

Scale屬性

JAVA方法 XML屬性 解釋 ScaleAnimation(float fromX, …) android:fromXScale 初始X軸縮放比例,1.0表示無變化 ScaleAnimation(…, float toX) android:toXScale 結束X軸縮放比例 ScaleAnimation(…, …, float fromY, …) androd:fromYScale 初始Y軸縮放比例 ScaleAnimation(…, …, …, float toY) android:toYScale 結束Y軸縮放比例 ScaleAnimation(…, float pivotX, …) android:pivotX 縮放起點X軸坐標(同上) ScaleAnimation(…, float pivotY) android:pivotY 縮放起點Y軸坐標(同上)

Translate屬性

JAVA方法 XML屬性 解釋 TranslateAnimation(float fromXDelta, …) android:fromXDelta 平移起始點X軸坐標 TranslateAnimation(…, float toXDelta) android:toXDelta 平移結束點X軸坐標 TranslateAnimation(…, float fromYDelta, …) android:fromYDelta 平移起始點Y軸坐標 TranslateAnimation(…, float toYDelta) android:toYDelta 平移結束點Y軸坐標

AnimationSet屬性

AnimationSet類比較特殊,因為該類是以上4類的組合容器管理類,沒有自己特有的屬性,它的屬性繼承自它的父類:Animation。
我們在使用的時候需要注意,當我們在對set標簽設置屬性的時候,那麼其標簽下的所有控件都會產生影響。

補間動畫的使用

我們可以在代碼以及XML中使用補間動畫,Android官方文檔中推薦我們使用XML文件定義補間動畫,因為它更可讀,可重復使用,並且支持swappable than hard-coding的動畫。

代碼中使用補間動畫

XML布局中定義了五個按鈕,分別對於如下的點擊事件:

public void alpha(View v){
    AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
    anim.setDuration(1000);
    v.startAnimation(anim);
}

public void rotate(View v){
    RotateAnimation anim = new RotateAnimation(0.0f, -360f, v.getWidth()/2, v.getHeight()/2);
    anim.setDuration(1000);
    v.startAnimation(anim);
}

public void scale(View v){
    ScaleAnimation anim = new ScaleAnimation(1.0f, 0.0f, 0.0f, 1.0f, v.getWidth() / 2, v.getHeight() / 2);
    anim.setDuration(1000);
    v.startAnimation(anim);
}

public void translate(View v){
    TranslateAnimation anim = new TranslateAnimation(0.0f, 10.0f, 100f, 200f);
    anim.setDuration(1000);
    v.startAnimation(anim);
}
public void set(View v){
    AnimationSet anim = new AnimationSet(this, null);
    AlphaAnimation alpha = new AlphaAnimation(0.0f, 1.0f);
    anim.setDuration(1000);
    RotateAnimation rotate = new RotateAnimation(0.0f, -360f, v.getWidth()/2, v.getHeight()/2);
    anim.setDuration(1000);
    anim.addAnimation(alpha);
    anim.addAnimation(rotate);
    v.startAnimation(anim);
}

運行效果:
這裡寫圖片描述

XML中定義補間動畫資源(AnimationDrawable)

定義補間動畫的XML資源應該放在/res/anim/路徑下,當我們創建好項目,默認是不會有anim這個目錄的,自己創建一個就行了。
設置補間動畫的語法格式如下:




    

    

    

    

上面的語法,包含了大量的fromXX..toXX..屬性,這些屬性就用於定義View的開始狀態和結束狀態,當進行縮放變換(scale)、旋轉變換(rotate)時,還需要指定pivotX、pivotY兩個屬性,這兩個屬性指定變換的中心點,也就是基於哪個點進行縮放、旋轉。duration則指定的動畫的持續時間。

除此之外,上面的、、都可指定一個android:interpolator屬性,該屬性指定動畫的變化速度,可以實現勻速、正加速、負加速、無規則加速等,Android系統的R.anim類中包含了大量的常量,它們定義了不同的動畫速度,其中包括:
* linear_interpolator:勻速變換。
* accelerate_interpolater:加速變換。
* decelerate_interpolater:減速變換。
下面詳細講解一下Interpolator的使用。

補間(Tween)動畫與Interpolator

Interpolator在學校學習的時候翻譯為了:“插值器“。它的具體作用是為了控制在動畫期間需要動態“補入”多少幀,具體在動畫運行的哪些時候補入幀。
Interpolator根據指定算法計算出整個動畫所需要動態插入幀的密度和位置。簡單來說,Interpolator負責控制動畫的變化速度,這就使得基本的動畫效果(Alpha、Scale、Translate、Rotate)能以勻速變化、加速、減速、拋物線等各種速度變化。

Interpolator是一個接口,它定義了所有Interpolator都必須實現的方法:float getInterpolator(float input),開發者完全可以通過實現Interpolator來控制動畫的變化速度。Android為Interpolator提供了如下幾個實現類,分別用於實現不同的動畫變化速度。

LinearInterpolator:動畫以勻速改變。

 

這裡寫圖片描述
AccelerateInterpolator:在動畫開始的地方改變速度較慢,然後開始加速。

 

 

這裡寫圖片描述
AccelerateDecelerateInterpolator:在動畫開始、結束的地方速度較慢,中間的時候加速。

 

 

這裡寫圖片描述
CycleInterpolator:動畫循環播放指定的次數,變化速度按正弦曲線改變。

 

 

這裡寫圖片描述
DecelerateInterpolator:在動畫開始的地方改變速度較快,然後開始減速。

 

 

這裡寫圖片描述

 

以上Interpolator演示動畫資源文件:




    

在代碼中通過AnimationUtils.loadAnimation()方法加載了動畫資源文件:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_interpolator);
mImage.startAnimation(animation);
 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved