1.逐幀動畫(Frame Animation)
通常在Android項目的res/drawable/目錄下面定義逐幀動畫的XML模板文件。編碼的時候,需要在動畫模板文件的<animation-list>標簽中依次放入需要播放的圖片,並設置好播放的間隔時間。
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/a001" android:duration="100"/> <item android:drawable="@drawable/a002" android:duration="100"/> <item android:drawable="@drawable/a003" android:duration="100"/> <!-- (省略) --> </animation-list>
注意:逐幀動畫並不能獨立使用,動畫效果的顯示還是要借助於ImageView圖像控件。
舉例:(ImageView元素的id為m_image_view,上面的動畫模板文件名為m_frame_animation)
public class MainActivity extends Activity { AnimationDrawable mAnimationDrawable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView mImageView = (ImageView) findViewById(R.id.m_image_view); mImageView.setBackgroundResource(R.drawable.m_frame_animation); mAnimationDrawable = mImageView.getBackground(); mAnimationDrawable.start(); } @Override public void onPause() { super.onPause(); mAnimationDrawable.stop(); } }
2.補間動畫(Tween Animation)
逐幀動畫通過連續播放圖片來模擬動畫的效果,而補間動畫則是通過在兩個關鍵幀之間補充簡便的動畫效果來實現的。
目前Android應用框架支持的補間動畫效果有以下5種。具體實現在android.view.animation類庫中。
+AlphaAnimation:透明度(alpha)漸變效果,對應<alpha/>標簽。
+TranslateAnimation:位移漸變,需要指定移動點的開始和結束坐標,對應<translate/>標簽。
+ScaleAnimation:縮放漸變,可以指定縮放的參考點,對應<scale/>標簽。
+RotateAnimation:旋轉漸變,可以指定旋轉的參考點,對應<rotate/>標簽。
+AnimationSet:組合漸變,支持組合多種漸變效果,對應<set/>標簽。
補間動畫的效果同樣可以使用XML語言來定義,這些動畫模板文件通常會被放在Android項目的res/anim/目錄下。
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator"> <!-- 在1000ms(1秒)時間內,從透明度0(完全透明)變成1(不透明),同時由該元素中心位置從大小為0.1(十分之一)變成1(正常) --> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="1000" /> <scale android:fromXScale="0.1" android:toXScale="1.0" android:fromYScale="0.1" android:toYScale="1.0" android:duration="1000" android:pivotX="50%" android:pivotY="50%" android:startOffSet="100" /> </set>
舉例:(ImageView元素的id為m_image_view,上面的動畫模板文件名為m_tween_animation)
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView mImageView = (ImageView) findViewById(R.id.m_image_view); Animation mAnimation = AnimationUtils.loadAnimation(this, R.drawable.m_tween_animation); mImageView.startAnimation(mAnimation); } }