程序只能加載GIF動(dòng)畫(huà)的第一幀。效果如下:如果想要正常播放GIF動(dòng)畫(huà),需要借助Movie實(shí)" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Android播放GIF動(dòng)畫(huà)

系統(tǒng) 2152 0
Android支持GIF動(dòng)畫(huà),但是如果利用ImageView標(biāo)簽直接寫(xiě)在布局文件中:
    
<ImageView android:id="@+id/gifpicture" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:src="@drawable/animation"    />

  

程序只能加載GIF動(dòng)畫(huà)的第一幀。效果如下:

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

Android播放GIF動(dòng)畫(huà)
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à)就能正常播放了。

Android播放GIF動(dòng)畫(huà)




源代碼見(jiàn): http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/

Android播放GIF動(dòng)畫(huà)


更多文章、技術(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ì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 平和县| 格尔木市| 木里| 江华| 蒙阴县| 南皮县| 屏东县| 本溪市| 华亭县| 仁化县| 德阳市| 浦江县| 东宁县| 正宁县| 阳谷县| 祥云县| 涡阳县| 汉源县| 溧阳市| 巴东县| 民和| 遂平县| 温泉县| 扎赉特旗| 全州县| 黎平县| 芷江| 昂仁县| 左云县| 庆元县| 林甸县| 武宁县| 鲁甸县| 鄂托克前旗| 弥勒县| 叙永县| 巴彦淖尔市| 高雄县| 社旗县| 定南县| 横山县|