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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
