標籤:
就好像演電影一樣,播放實現準備好的圖片,來實現動畫效果。
逐幀動畫需要用到AnimationDrawable類,該類主要用於建立一個逐幀動畫,然後我們把這個動畫設定為view的背景即可。
android提供兩種方法為AnimationDrawable添加幀:XML定義和JAVA代碼建立。
XML
因為動畫幀的資源需要是一個Drawable對象,所以需要把它放到Drawable目錄下。在<animation-list>使用<item>來添加一幀
anima.xml
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/a" android:duration="100"/> <item android:drawable="@drawable/b" android:duration="100"/> <item android:drawable="@drawable/c" android:duration="100"/> <item android:drawable="@drawable/d" android:duration="100"/> <item android:drawable="@drawable/e" android:duration="100"/></animation-list>
MainActivity.java
package cn.lixyz.animator;import android.annotation.SuppressLint;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.widget.ImageView;@SuppressLint("NewApi")public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv = (ImageView) findViewById(R.id.image); AnimationDrawable ad = new AnimationDrawable(); ad = (AnimationDrawable) getResources().getDrawable(R.drawable.anima); iv.setBackground(ad); ad.start(); }}
JAVA
在Android中,除了可以通過XML檔案定義一個逐幀動畫之外,還可以通過AnimationDrawable.addFrame()方法為AnimationDrawable添加動畫幀
package cn.lixyz.animator;import android.annotation.SuppressLint;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.widget.ImageView;@SuppressLint("NewApi")public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv = (ImageView) findViewById(R.id.image); AnimationDrawable ad = new AnimationDrawable(); ad.addFrame(getResources().getDrawable(R.drawable.a), 500); ad.addFrame(getResources().getDrawable(R.drawable.b), 500); ad.addFrame(getResources().getDrawable(R.drawable.c), 500); ad.addFrame(getResources().getDrawable(R.drawable.d), 500); ad.addFrame(getResources().getDrawable(R.drawable.e), 500); ad.setOneShot(false); iv.setBackground(ad); ad.start(); }}
常用方法
AnimationDrawable還有一些其他的方法:
void start():開始播放逐幀動畫。
void stop():停止播放逐幀動畫。
void addFrame(Drawable frame,int duration):為AnimationDrawable添加一幀,並設定期間。
int getDuration(int i):得到指定index的幀的期間。
Drawable getFrame(int index):得到指定index的幀Drawable。
int getNumberOfFrames():得到當前AnimationDrawable的所有幀數量。
boolean isOneShot():當前AnimationDrawable是否執行一次,返回true執行一次,false迴圈播放。
boolean isRunning():當前AnimationDrawable是否現正播放。
void setOneShot(boolean oneShot):設定AnimationDrawable是否執行一次,true執行一次,false迴圈播放
Android筆記(六十三) android中的動畫——逐幀動畫( frame-by-frame animation)