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