天天看點

Android加載Gif和ImageView的通用解決方案:android-gif-drawable(1)



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動圖:

繼續閱讀