Android支持GIF動(dòng)畫(huà),但是如果利用ImageView標(biāo)簽直接寫(xiě)在布局文件中:
程序只能加載GIF動(dòng)畫(huà)的第一幀。效果如下:
如果想要正常播放GIF動(dòng)畫(huà),需要借助Movie實(shí)現(xiàn)。寫(xiě)了一個(gè)簡(jiǎn)單示例,程序目錄結(jié)構(gòu)如下:
animation.gif是需要播放的GIF動(dòng)畫(huà)。
MainActivity實(shí)現(xiàn)了加載GIF動(dòng)畫(huà)的功能。
內(nèi)部類(lèi)CustomGifView 利用Movie播放GIF動(dòng)畫(huà)。解釋一下:
將GIF動(dòng)畫(huà)以文件流的形式轉(zhuǎn)換成Movie。
?? invalidate();作用是刷新當(dāng)前View,這樣onDraw方法重復(fù)執(zhí)行,Movie就能畫(huà)出GIF動(dòng)畫(huà)的每一幀。到此,GIF動(dòng)畫(huà)就能正常播放了。
源代碼見(jiàn): 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動(dòng)畫(huà)的第一幀。效果如下:

如果想要正常播放GIF動(dòng)畫(huà),需要借助Movie實(shí)現(xiàn)。寫(xiě)了一個(gè)簡(jiǎn)單示例,程序目錄結(jié)構(gòu)如下:

animation.gif是需要播放的GIF動(dòng)畫(huà)。
MainActivity實(shí)現(xiàn)了加載GIF動(dòng)畫(huà)的功能。
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(); } } } }
內(nèi)部類(lèi)CustomGifView 利用Movie播放GIF動(dòng)畫(huà)。解釋一下:
mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation));
將GIF動(dòng)畫(huà)以文件流的形式轉(zhuǎn)換成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();作用是刷新當(dāng)前View,這樣onDraw方法重復(fù)執(zhí)行,Movie就能畫(huà)出GIF動(dòng)畫(huà)的每一幀。到此,GIF動(dòng)畫(huà)就能正常播放了。


源代碼見(jiàn): http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
