Android下載入Gif動畫的類庫

來源:互聯網
上載者:User

  又是好久沒有寫部落格了,感覺自己再不寫點東西,就無法沉澱知識了。但是這幾天苦於工作繁忙,和遇到了學習瓶頸,所以部落格一直都沒有更新。不過最近幾天在實現一個手機防盜的軟體,就是手機遺失後,可以通過簡訊的方法擷取到你遺失的手機的位置。但是效果不是很理想,所以一直都沒有敢在部落格上記錄下來。如果各位童鞋有好的想法,歡迎你們跟我交流和討論。通過站內短訊息或者郵箱,都可以的:crazypebble.android@gmail.com。

  好了,扯淡結束,現在開始進入正題了,希望大家不要介意我發了這麼多的牢騷~主要是向跟大家分享一下自己目前的心情。下面我們進入正題吧。  

  在Android平台下,Google並沒有為我們提供顯示GIF動畫的類庫。如果想在Android平台下顯示動畫效果,可能需要使用到Android提供的animation類來輔助我們建立動畫效果,但是這種動畫顯示的效果並不像gif檔案那樣理想,animation類建立的動畫相對來說比較簡單和單一。因此我在網上收集了一些關於在Android平台下顯示GIF動畫的方法,在這裡跟大家一起分享一下。

一、GIF動畫分割

  在編碼之後,需要利用第三方的工具將GIF動畫分割成一個個的BMP或JPG格式的圖片,再通過Android提供的animation類載入這些圖片,以實現動畫的效果。其實,說來說去,還是利用animation的方法,而且還需要手動分割GIF圖片,很是麻煩!但是這種變相的方法也可以實現這個顯示動畫的功能了。

  這裡不堆文字了,直接給出一個連結吧。之前已經說過了,是網上收集的資料,還請各位跳轉到下面這個連結:http://www.cnblogs.com/TerryBlog/archive/2010/09/06/1819641.html 如果各位需要轉載,請尊重這位博主的勞動成果。

二、GifView類

  去看看開發文檔吧,找找這個類GifView類,有木有,有木有?結果是木有。對,這是一位N人寫的一個載入Gif動畫的類,並且已經將該類做成一個jar類庫,供開發人員直接載入使用。這個類的使用非常方便,跟普通的UI控制項ImageView、Button、TextView等的使用方法都是一樣的。

1、原理:

  我對這個類的核心不分代碼詳細分析了一下,基本是按照GIF檔案格式,將GIF拆分成一個個BMP映像,然後再將這些BMP圖片顯示出來。原理跟第一種方法是一樣的,但是GifView類將分割GIF映像幀的操作放在一個類中,不需要我們過多的關心GIF是如何拆分的,而且GifView類還提供了一個公開的方法,以方便開發人員調用。

2、GifView提供的公開方法

設定GIF動畫的資料來源:

    /**
* 從GIF檔案的檔案資料載入GIF動畫
* @param gif的檔案內容
*/
public void setGifImage(byte[] gif){
setGifDecoderImage(gif);
}

/**
* 從檔案或網路輸入資料流中載入GIF動畫
* @param 輸入資料流
*/
public void setGifImage(InputStream is){
setGifDecoderImage(is);
}

/**
*
* @param resId GIF動畫的資源ID
*/
public void setGifImage(int resId){
Resources r = this.getResources();
InputStream is = r.openRawResource(resId);
setGifDecoderImage(is);
}

控制GIF動畫的顯示模式:動態或者靜態

    /**
* 顯示GIF動畫的第一幀的映像,也就是不讓GIF動起來
*/
public void showCover(){
if(gifDecoder == null)
return;
pause = true;
currentImage = gifDecoder.getImage();
invalidate();
}
    /**
* 動態顯示GIF動畫
*/
public void showAnimation(){
if(pause){
pause = false;
}
}

設定GIF動畫的顯示比例:

    /**
* 設定GIF動畫顯示的高度和寬度
* @param width
* @param height
*/
public void setShowDimension(int width,int height){
if(width > 0 && height > 0){
showWidth = width;
showHeight = height;
rect = new Rect();
rect.left = 0;
rect.top = 0;
rect.right = width;
rect.bottom = height;
}
}

設定GID動畫顯示的方式:(三種)

先載入後顯示:GifImageType.WAIT_FINISH

邊載入邊顯示:GifImageType.SYNC_DECODER

只顯示第一幀再顯示:GifImageType.COVER

    public void setGifImageType(GifImageType type){
if(gifDecoder == null)
animationType = type;
}

3、使用方法

  具體的使用方法,將在文章的最後與GifView類的原始碼和jar檔案一起放出,這裡先跟大家介紹一下。

a、將GifView.jar加入到項目中;

b、在布局檔案中加入GifView控制項,並設定GifView的基本屬性:包括ID、寬度、高度、邊距等等,與其他UI類似

     <com.ant.liao.GifView
android:id="@+id/gif1"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:paddingRight="14px" android:enabled="false" />

c、在代碼中添加控制項執行個體,並載入顯示。

// 從xml中得到GifView的控制代碼  
gf1 = (GifView) findViewById(R.id.gif1);
// 設定Gif圖片源
gf1.setGifImage(R.drawable.gif1);
// 添加監聽器
gf1.setOnClickListener(this);
// 設定顯示的大小,展開或者壓縮
gf1.setShowDimension(300, 300);
// 設定載入方式:先載入後顯示、邊載入邊顯示、只顯示第一幀再顯示
gf1.setGifImageType(GifImageType.COVER);

  以上就是想要介紹的東西,結束之後先給出GifView類的作者的連結,大家可以多多關注,學習更多的技術。向“懶骨頭”(CSDN)致敬。http://blog.csdn.net/iamlazybone/archive/2010/10/28/5972234.aspx

附GifView類的原始碼和Demo程式:http://u.115.com/file/f648778d4a

由於該類庫中的GifDecode.java檔案的注釋無法正常顯示,因此我分析了一下源碼,簡要的寫了一下注釋:GifDecode.java ,以便大家在學習的時候更加方便。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.