Android加載Gif和ImageView的通用解決方案:android-gif-drawable(1)
Android自己的ImageView或者View不能直接加載運作Gif圖檔,如果要在一個Android的ImageView中加載一個gif圖檔資源,則需要通過其他途徑實作,我之前寫了一些關于如何在Android中加載gif圖檔的文章:
文章1,《基于開源架構Glide加載Gif資源圖到Android ImageView中》連結位址:
http://blog.csdn.net/zhangphil/article/details/45561983 文章2,《Android加載Gif圖檔的一般方法:Movie實作》連結位址: http://blog.csdn.net/zhangphil/article/details/50441944文章1,2雖然解決了如何加載gif圖檔資源的問題,但仍存在一個問題:需要事先知道該資源是何圖檔資源,并假定該資源就是gif圖檔資源。
這在有些需求開發中或許不恰當,因為有些時候,僅僅一個View容器,需要它呈現和裝載多種圖檔類型不管是gif或者png,而不需要事先知道它是何種圖檔類型。
android-gif-drawable就是這樣一種通用的gif加載解決方案。android-gif-drawable在github上的官方首頁位址:
https://github.com/koral--/android-gif-drawable,該位址上的庫及代碼是針對Android Studio的。
針對Eclipse,android-gif-drawable提供了專門的包(包裡含有需要的庫資源和demo代碼)。頁面連結位址:
https://github.com/koral--/android-gif-drawable-eclipse-sample,将該代碼整體全部下載下傳,下載下傳後是一個完整的eclipse項目,編譯器如果報錯則可能需要導入相關的support-v4包,已經把jdk切換到1.7及以上。然後就可以直接運作這個demo項目工程了。
android-gif-drawable使用簡單,把GifImageView當作普通的View寫進布局檔案中,然後加載gif動圖資源或者普通的png、jpeg圖資源裝載進去即可。
簡單給出一個用GifImageView加載gif動圖以及加載普通的png圖檔的例子。
先寫布局檔案activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<pl.droidsonroids.gif.GifImageView
android:id="@+id/gif1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<pl.droidsonroids.gif.GifImageView
android:id="@+id/gif2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
上層Java代碼:
package zhangphil.gif;
import android.app.Activity;
import android.os.Bundle;
import pl.droidsonroids.gif.GifDrawable;
import pl.droidsonroids.gif.GifImageView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GifImageView gifImageView1 = (GifImageView) findViewById(R.id.gif1);
GifImageView gifImageView2 = (GifImageView) findViewById(R.id.gif2);
try {
// 如果加載的是gif動圖,第一步需要先将gif動圖資源轉化為GifDrawable
// 将gif圖資源轉化為GifDrawable
GifDrawable gifDrawable = new GifDrawable(getResources(), R.drawable.loading);
// gif1加載一個動态圖gif
gifImageView1.setImageDrawable(gifDrawable);
// 如果是普通的圖檔資源,就像Android的ImageView set圖檔資源一樣簡單設定進去即可。
// gif2加載一個普通的圖檔(如png,bmp,jpeg等等)
gifImageView2.setImageResource(R.drawable.ic_launcher);
} catch (Exception e) {
e.printStackTrace();
}
}
}
運作結果如圖所示(上面是一個不停旋轉的加載gif動圖,下面是一個普通的png圖檔,即小機器人):
由于
這個頁面下載下傳到的代碼針對eclipse推出的項目包中是一個混在一起的項目,實際開發過程中,最好的做法是把依賴的核心代碼及資源分離出來,這樣達到複用和工程代碼結構清晰,我把android-gif-drawable
for Eclipse的關鍵代碼抽取分離出來,單獨作成一個lib,需要的時候直接導入然後引用即可。
android-gif-drawable for Eclipse在github上的lib包頁面位址:
https://github.com/zhangphil/android-gif-drawable-for-Eclipse使用時候,從這個頁面下載下傳完整的lib項目,作為lib導入到eclipse裡面,在自己需要的項目中加以引用即可。
附上loading.gif動圖: