Android支持GIF動畫,但是如果利用ImageView標簽直接寫在布局文件中:
程序只能加載GIF動畫的第一幀。效果如下:
如果想要正常播放GIF動畫,需要借助Movie實現。寫了一個簡單示例,程序目錄結構如下:
animation.gif是需要播放的GIF動畫。
MainActivity實現了加載GIF動畫的功能。
內部類CustomGifView 利用Movie播放GIF動畫。解釋一下:
將GIF動畫以文件流的形式轉換成Movie。
?? invalidate();作用是刷新當前View,這樣onDraw方法重復執行,Movie就能畫出GIF動畫的每一幀。到此,GIF動畫就能正常播放了。
源代碼見: http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/
<ImageView android:id="@+id/gifpicture"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/animation" />
程序只能加載GIF動畫的第一幀。效果如下:
如果想要正常播放GIF動畫,需要借助Movie實現。寫了一個簡單示例,程序目錄結構如下:
animation.gif是需要播放的GIF動畫。
MainActivity實現了加載GIF動畫的功能。
public class MainActivity extends Activity {
private Movie mMovie;
private long mMovieStart;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new CustomGifView(this));
}
class CustomGifView extends View {
public CustomGifView(Context context) {
super(context);
mMovie = Movie.decodeStream(getResources().openRawResource(
R.drawable.animation));
}
public void onDraw(Canvas canvas) {
long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) { // first time
mMovieStart = now;
}
if (mMovie != null) {
int dur = mMovie.duration();
if (dur == 0) {
dur = 1000;
}
int relTime = (int) ((now – mMovieStart) % dur);
mMovie.setTime(relTime);
mMovie.draw(canvas, 0, 0);
invalidate();
}
}
}
}
內部類CustomGifView 利用Movie播放GIF動畫。解釋一下:
mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation));
將GIF動畫以文件流的形式轉換成Movie。
public void onDraw(Canvas canvas) {
long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) { // first time
mMovieStart = now;
}
if (mMovie != null) {
int dur = mMovie.duration();
if (dur == 0) {
dur = 1000;
}
int relTime = (int) ((now – mMovieStart) % dur);
mMovie.setTime(relTime);
mMovie.draw(canvas, 0, 0);
invalidate();
}
}
?? invalidate();作用是刷新當前View,這樣onDraw方法重復執行,Movie就能畫出GIF動畫的每一幀。到此,GIF動畫就能正常播放了。
源代碼見: http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

