1. 程式人生 > >【封裝】圖片載入框架Glide使用

【封裝】圖片載入框架Glide使用

一直在用UIL(Android-Universal-Image-Loader)載入圖片,自我感覺載入使用還不錯,後來同事告訴我有個新玩意Glide,於是我就搜了下這個東西,發現確實好用太多了,在說Glide框架之前,先來看看一些主流的圖片框架,這樣你也可以去搜搜別的框架,然後學到東西也能寫個文章來分享下。

圖片主流載入框架:

名稱

描述

Android Universal Image Loader

一個強大的載入,快取,展示圖片的庫

Picasso

一個強大的圖片下載與快取的庫

Fresco

一個用於管理影象和他們使用的記憶體的庫

Glide

一個圖片載入和快取的庫

Android Universal Image Loader

ImageLoder的配置很多,所以靈活度較高。

Picasso

Square公司的開源專案可以與旗下的各種框架整合使用,例如okhttp。

Fresco

Facebook公司出品的一個功能強大的框架,其內建的SimpleDraweeView可以實現很多種圖片樣式,其在5.0以下的記憶體優化很好。

Glide

Gilde的使用很像是Picasso,所以你掌握了他們其中一個的話,另一個很快就能掌握了,這個是谷歌官方推薦使用的圖片載入框架,它與Picasso的不同點在於記憶體上的優化,Picasso預設的bitmap格式為ARGB_8888,而Gilde的Bitmap格式為RGB_565,所以Picasso的記憶體消耗要比Gilde的消耗大上一半。

開始使用Gilde

1.基本使用

首先我們來載入一張很簡單的網路圖片

 程式碼:

package com.yckj.project.activity;

import com.bumptech.glide.Glide;
import com.yckj.project.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class LoadPictureActivity extends Activity{
	private ImageView imageView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_imageview);
		imageView = (ImageView) findViewById(R.id.img);//初始化View
		String url = "http://neitui123-data.stor.vipsinaapp.com/neitui/company/104654/photo_icon.png";
		Glide.with(this).load(url).into(imageView);//載入圖片
	}
}
佈局檔案:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="loading_image" />

</LinearLayout>

2.其他使用方法

其餘的使用方法有很多,所以這裡我直接給出封裝好的工具類,如果你有興趣也可以自己手動來使用下

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;

import android.content.Context;
import android.widget.ImageView;

/**
 * 開源圖片框架Gilde工具類
 */
public class GildeUtils {
	/**
	 * 載入圖片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 */
	public static void loadImage(String url, Context context, ImageView imageView) {
		Glide.with(context).load(url).into(imageView);
	}

	/**
	 * 
	 * 是否禁止磁碟快取載入圖片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 * @param type
	 *            快取的型別
	 *            <li>磁碟快取全部 DiskCacheStrategy.ALL</li>
	 *            <li>磁碟禁止快取DiskCacheStrategy.NONE</li>
	 */
	public static void loadImage(String url, Context context, ImageView imageView, DiskCacheStrategy type) {
		Glide.with(context).load(url).diskCacheStrategy(type).into(imageView);
	}

	/**
	 * 
	 * 是否禁止記憶體快取載入圖片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 * @param skipMemoryCache
	 *            禁止記憶體快取 true為禁止
	 */
	public static void loadImage(String url, Context context, ImageView imageView, boolean skipMemoryCache) {
		Glide.with(context).load(url).skipMemoryCache(skipMemoryCache).into(imageView);
	}

	/**
	 * 
	 * 是否禁止記憶體/磁碟快取載入圖片
	 * 
	 * @param url
	 * @param context
	 * @param imageView
	 * @param type
	 *            快取的型別
	 *            <li>磁碟快取全部 DiskCacheStrategy.ALL</li>
	 *            <li>磁碟禁止快取DiskCacheStrategy.NONE</li>
	 * @param skipMemoryCache
	 *            禁止記憶體快取 true為禁止
	 */
	public static void loadImage(String url, Context context, ImageView imageView, DiskCacheStrategy type,
			boolean skipMemoryCache) {
		Glide.with(context).load(url).skipMemoryCache(skipMemoryCache).diskCacheStrategy(type).into(imageView);
	}

	/**
	 * 清除記憶體中的快取 必須在UI執行緒中呼叫
	 * 
	 * @param context
	 */
	public static void clearMemory(Context context) {
		Glide.get(context).clearMemory();
	}

	/**
	 * 清除磁碟中的快取 必須在後臺執行緒中呼叫,建議同時clearMemory()
	 * 
	 * @param context
	 */
	public static void clearDiskCache(Context context) {
		Glide.get(context).clearDiskCache();
	}
	
	/**
	 * 優先順序載入圖片
	 * @param url
	 * @param context
	 * @param imageView
	 * @param priority  優先順序  Priority.LOW/Priority.HIGH
	 */
	public static void loadImageWithPriority(String url, Context context, ImageView imageView,Priority priority) {
		Glide.with(context).load(url).priority(priority).into(imageView);
	}
}
執行效果:



參考文章: