1. 程式人生 > >glide封裝工具類

glide封裝工具類

Google圖片載入庫Glide的簡單封裝GlideUtils

因為專案裡用的Glide的地方比較多,所有簡單的封裝了以下,其實也沒什麼,就是寫了個工具類,但是還是要把基礎說下

Glide的Github

Glide簡單配置

Glide有三種整合的方式

  • 1.JAR
  • Gradle(推薦)

首先需要在你model的build.gradle裡新增

repositories {
    // jcenter() works as well because it pulls from Maven Central
    mavenCentral() 
}
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

然後在我們的app的build.gradle裡新增

 compile 'com.github.bumptech.glide:glide:3.7.0'
 compile 'com.android.support:support-v4:24.2.1'
  • 1
  • 2
  • 1
  • 2

這裡要注意的是Glide需要V4包的支援,V4包的版本根據你的開發環境來決定

  • Maven
<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>glide</artifactId>
  <version>3.7.0</version
>
</dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>support-v4</artifactId> <version>r7</version> </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Glide簡單使用

Glide是在Picasso的基礎上進行改良的,我們來看下他最基礎的使用方法

  ImageView imageView = (ImageView) findViewById(R.id
.my_image_view); Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
  • 1
  • 2
  • 1
  • 2

其實很簡單,with裡支援的比Picasso多很多

  • Context
  • Activity
  • Fragment
  • FragmentActivity

lode是需要載入的圖片地址,into是賦予的控制元件,當然還有很多其他的方法,我們等下說

Glide的優點

  • 使用簡單
  • 可配置度高,自適應程度高
  • 支援常見圖片格式 Jpg png gif webp
  • 支援多種資料來源 網路、本地、資源、Assets 等
  • 高效快取策略 支援Memory和Disk圖片快取 預設Bitmap格式採用RGB_565記憶體使用至少減少一半
  • 生命週期整合 根據Activity/Fragment生命週期自動管理請求
  • 高效處理Bitmap 使用Bitmap Pool使Bitmap複用,主動呼叫recycle回收需要回收的Bitmap,減小系統回收壓力
  • 這裡預設支援Context,Glide支援Context,Activity,Fragment,FragmentActivity

Glide的封裝

1.預設載入

public static void loadImageView(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).into(mImageView);
   }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2.載入指定大小

public static void loadImageViewSize(Context mContext, String path, int width, int height, ImageView mImageView) {
        Glide.with(mContext).load(path).override(width, height).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

3.設定載入中以及載入失敗圖片

public static void loadImageViewLoding(Context mContext, String path, ImageView mImageView, int lodingImage, int errorImageView) {
        Glide.with(mContext).load(path).placeholder(lodingImage).error(errorImageView).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

4.設定載入中以及載入失敗圖片並且指定大小

public static void loadImageViewLodingSize(Context mContext, String path, int width, int height, ImageView mImageView, int lodingImage, int errorImageView) {
        Glide.with(mContext).load(path).override(width, height).placeholder(lodingImage).error(errorImageView).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

5.設定跳過記憶體快取

public static void loadImageViewCache(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).skipMemoryCache(true).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

6.設定下載優先順序

 public static void loadImageViewPriority(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).priority(Priority.NORMAL).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

7.設定快取策略

策略分為:

  • all:快取源資源和轉換後的資源
  • none:不作任何磁碟快取
  • source:快取源資源
  • result:快取轉換後的資源
public static void loadImageViewDiskCache(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).diskCacheStrategy(DiskCacheStrategy.ALL).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

8.設定載入動畫

api也提供了幾個常用的動畫:比如crossFade()

public static void loadImageViewAnim(Context mContext, String path, int anim, ImageView mImageView) {
        Glide.with(mContext).load(path).animate(anim).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

9.設定縮圖支援

public static void loadImageViewThumbnail(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).thumbnail(0.1f).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

10.設定動態轉換

api提供了比如:centerCrop()、fitCenter()等

 public static void loadImageViewCrop(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).centerCrop().into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

11.設定動態GIF載入方式

public static void loadImageViewDynamicGif(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).asGif().into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

12.設定靜態GIF載入方式

 public static void loadImageViewStaticGif(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).asBitmap().into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

13.設定監聽請求介面

設定監聽的用處 可以用於監控請求發生錯誤來源,以及圖片來源 是記憶體還是磁碟

public static void loadImageViewListener(Context mContext, String path, ImageView mImageView, RequestListener<String, GlideDrawable> requstlistener) {
        Glide.with(mContext).load(path).listener(requstlistener).into(mImageView);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

14.設定要載入的內容

專案中有很多需要先下載圖片然後再做一些合成的功能,比如專案中出現的圖文混排

public static void loadImageViewContent(Context mContext, String path, SimpleTarget<GlideDrawable> simpleTarget) {
        Glide.with(mContext).load(path).centerCrop().into(simpleTarget);
    }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

15.清理磁碟快取

 public static void GuideClearDiskCache(Context mContext) {
        //理磁碟快取 需要在子執行緒中執行
        Glide.get(mContext).clearDiskCache();
    }
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

16.清理記憶體快取

public static void GuideClearMemory(Context mContext) {
        //清理記憶體快取  可以在UI主執行緒中進行
        Glide.get(mContext).clearMemory();
    }
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

當然,我們後續肯定會功能越來越多的,我把專案開源在Github上了,為了使用起來方便自己封裝了下,同時也分享以下

GlideUtils原始碼

package com.liuguilin.gankclient.util;

/*
 *  專案名:  GankClient 
 *  包名:    com.liuguilin.gankclient.util
 *  檔名:   GlideUtils
 *  建立者:   LGL
 *  建立時間:  2016/10/20 16:45
 *  描述:    Glide封裝
 */

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

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.SimpleTarget;

public class GlideUtils {

    /**
     * Glide特點
     * 使用簡單
     * 可配置度高,自適應程度高
     * 支援常見圖片格式 Jpg png gif webp
     * 支援多種資料來源  網路、本地、資源、Assets 等
     * 高效快取策略    支援Memory和Disk圖片快取 預設Bitmap格式採用RGB_565記憶體使用至少減少一半
     * 生命週期整合   根據Activity/Fragment生命週期自動管理請求
     * 高效處理Bitmap  使用Bitmap Pool使Bitmap複用,主動呼叫recycle回收需要回收的Bitmap,減小系統回收壓力
     * 這裡預設支援Context,Glide支援Context,Activity,Fragment,FragmentActivity
     */

    //預設載入
    public static void loadImageView(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).into(mImageView);
    }

    //載入指定大小
    public static void loadImageViewSize(Context mContext, String path, int width, int height, ImageView mImageView) {
        Glide.with(mContext).load(path).override(width, height).into(mImageView);
    }

    //設定載入中以及載入失敗圖片
    public static void loadImageViewLoding(Context mContext, String path, ImageView mImageView, int lodingImage, int errorImageView) {
        Glide.with(mContext).load(path).placeholder(lodingImage).error(errorImageView).into(mImageView);
    }

    //設定載入中以及載入失敗圖片並且指定大小
    public static void loadImageViewLodingSize(Context mContext, String path, int width, int height, ImageView mImageView, int lodingImage, int errorImageView) {
        Glide.with(mContext).load(path).override(width, height).placeholder(lodingImage).error(errorImageView).into(mImageView);
    }

    //設定跳過記憶體快取
    public static void loadImageViewCache(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).skipMemoryCache(true).into(mImageView);
    }

    //設定下載優先順序
    public static void loadImageViewPriority(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).priority(Priority.NORMAL).into(mImageView);
    }

    /**
     * 策略解說:
     * <p>
     * all:快取源資源和轉換後的資源
     * <p>
     * none:不作任何磁碟快取
     * <p>
     * source:快取源資源
     * <p>
     * result:快取轉換後的資源
     */

    //設定快取策略
    public static void loadImageViewDiskCache(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).diskCacheStrategy(DiskCacheStrategy.ALL).into(mImageView);
    }

    /**
     * api也提供了幾個常用的動畫:比如crossFade()
     */

    //設定載入動畫
    public static void loadImageViewAnim(Context mContext, String path, int anim, ImageView mImageView) {
        Glide.with(mContext).load(path).animate(anim).into(mImageView);
    }

    /**
     * 會先載入縮圖
     */

    //設定縮圖支援
    public static void loadImageViewThumbnail(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).thumbnail(0.1f).into(mImageView);
    }

    /**
     * api提供了比如:centerCrop()、fitCenter()等
     */

    //設定動態轉換
    public static void loadImageViewCrop(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).centerCrop().into(mImageView);
    }

    //設定動態GIF載入方式
    public static void loadImageViewDynamicGif(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).asGif().into(mImageView);
    }

    //設定靜態GIF載入方式
    public static void loadImageViewStaticGif(Context mContext, String path, ImageView mImageView) {
        Glide.with(mContext).load(path).asBitmap().into(mImageView);
    }

    //設定監聽的用處 可以用於監控請求發生錯誤來源,以及圖片來源 是記憶體還是磁碟

    //設定監聽請求介面
    public static void loadImageViewListener(Context mContext, String path, ImageView mImageView, RequestListener<String, GlideDrawable> requstlistener) {
        Glide.with(mContext).load(path).listener(requstlistener).into(mImageView);
    }

    //專案中有很多需要先下載圖片然後再做一些合成的功能,比如專案中出現的圖文混排

    //設定要載入的內容
    public static void loadImageViewContent(Context mContext, String path, SimpleTarget<GlideDrawable> simpleTarget) {
        Glide.with(mContext).load(path).centerCrop().into(simpleTarget);
    }

    //清理磁碟快取
    public static void GuideClearDiskCache(Context mContext) {
        //理磁碟快取 需要在子執行緒中執行
        Glide.get(mContext).clearDiskCache();
    }

    //清理記憶體快取
    public static void GuideClearMemory(Context mContext) {
        //清理記憶體快取  可以在UI主執行緒中進行
        Glide.get(mContext).clearMemory();
    }

}

相關推薦

glide封裝工具

Google圖片載入庫Glide的簡單封裝GlideUtils 因為專案裡用的Glide的地方比較多,所有簡單的封裝了以下,其實也沒什麼,就是寫了個工具類,但是還是要把基礎說下 Glide的Github Glide簡單配置 Glide有三種整合的方式 1.

如何呼叫封裝工具呼叫網上介面查詢工作日

如何呼叫封裝工具類呼叫網上介面查詢工作日 這裡的編輯器是STS,用的springboot整合環境; 先引進pom.xml依賴包 <?xml version="1.0" encoding="UTF-8"?> <project xml

HIbernate -----封裝 工具 utils(configration---建立sessionFactory--獲得session程式碼重複,封裝程式碼)

package com.itheima.utils; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; //完成

微信小程式:request請求封裝工具

修改過的封裝請求: header: {'Content-Type': 'application/json'},  防止引數中敏感字元丟失的問題 header: {'Content-Type': 'application/x-www-form-urlencoded'}, 

HttpUrlConnection+圖片載入+工具+介面回撥+單例+AsyncTask封裝工具

1.MainActivity頁面 package com.example.httpurlconnection; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import andro

dljd_011_jdbc再次封裝工具_把數據庫的相關信息寫到配置文件中,減低代碼的耦合度

man 數據庫工具類 () version 數據庫配置 測試 loader connect not 一、將連接數據庫所需的相關信息寫入到配置文件、通過讀取配置文件來獲取數據庫的相關信息 package edu.aeon.aeonutils; import jav

用hibernate封裝工具中的查詢方法

 可以將以下的方法整合到工具類中,用於以後的使用 public List query(String hql,Object...object){//使用這個類的時候hql語句形式:from 類 where ... //讀取總的配置檔案 Configuratio

Json結果集封裝工具-使用java的Map

/** * Title: Json * Description: Json結果集封裝工具類* @author zhaoxuehong * @date 2018年11月5日上午9:15:55 */public class Json { /** * * @param status 狀態碼 * @param ms

BeanUtils資料封裝工具的使用

Java程式碼: package com.java.domain; public class Person { private String name; private int age; private String gender; private String

單機版 RedisPoolUtil({基本操作封裝工具})【一】

<!--整合的RedisJAR--> <!--引入jedis需的jar包--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&

單機版 JedisUtil({基本操作封裝工具})【二】

<!--整合的RedisJAR--> <!--引入jedis需的jar包--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&

單機版 RedisUtils({基本操作封裝工具})【三】

<!--整合的RedisJAR--> <!--引入jedis需的jar包--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&

https封裝工具

package import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.In

ImageLoder封裝工具..

public class ImageLoaderutils {     //初使化     public static void initImageLoader(Context context){         //自定義磁碟快取路徑  系統預設的快取路徑 sd...&l

httpclient封裝工具

前言 在日常開發中,我們經常需要通過http協議去呼叫網路內容,雖然java自身提供了net相關工具包,但是其靈活性和功能總是不如人意,於是有人專門搞出一個httpclient類庫,來方便進行Http操作。對於httpcore的原始碼研究,我們可能並沒有達到這

Redis封裝工具

引用到的jedis的封裝類,然後又加了一層封裝 import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.JedisCommands; i

OkHttp網路連線封裝工具以及json轉換

public class OkHttpUtils { private static final String TAG = "OkHttpUtils"; private static OkHttpUtils mInstance;

Android 自定義Camera相機(封裝工具賊簡單)

背景 目前公司的專案都是,針對生物認證來進行一些驗證之類的功能,比方說,互動式活體檢測,人臉1v1(對比),人臉1vN(搜尋)。用系統自帶的相機?當然是不夠用了,不夠用那就自定義啦,就像是前幾天七夕,沒物件怎麼辦,當然是new一個了。對了結尾還提供了一個呼叫極

JFreeChart封裝工具

package com.wasu.itv.common.util;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.io.File;import java.io

Okhttp3封裝工具

public class OkHttp3Util {     /**      * 懶漢 安全 加同步      * 私有的靜態成員變數 只宣告不建立      * 私有的構造方法      * 提供返回例項的靜態方法      */     private static