Google图片加载库Glide的简单封装GlideUtils

来源:互联网 发布:淘宝seo pdf 编辑:程序博客网 时间:2024/04/19 00:08

Google图片加载库Glide的简单封装GlideUtils


因为项目里用的Glide的地方比较多,所有简单的封装了以下,其实也没什么,就是写了个工具类,但是还是要把基础说下

Glide的Github

  • https://github.com/bumptech/glide

Glide简单配置

Glide有三种集成的方式

  • 1.JAR

点击下载Glide.jar

  • Gradle(推荐)

首先需要在你model的build.gradle里添加

repositories {    // jcenter() works as well because it pulls from Maven Central    mavenCentral() }

然后在我们的app的build.gradle里添加

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

这里要注意的是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>

Glide简单使用

Glide是在Picasso的基础上进行改良的,我们来看下他最基础的使用方法

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

其实很简单,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);   }

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);    }

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);    }

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);    }

5.设置跳过内存缓存

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

6.设置下载优先级

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

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);    }

8.设置加载动画

api也提供了几个常用的动画:比如crossFade()

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

9.设置缩略图支持

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

10.设置动态转换

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

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

11.设置动态GIF加载方式

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

12.设置静态GIF加载方式

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

13.设置监听请求接口

设置监听的用处 可以用于监控请求发生错误来源,以及图片来源 是内存还是磁盘

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

14.设置要加载的内容

项目中有很多需要先下载图片然后再做一些合成的功能,比如项目中出现的图文混排

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

15.清理磁盘缓存

 public static void GuideClearDiskCache(Context mContext) {        //理磁盘缓存 需要在子线程中执行        Glide.get(mContext).clearDiskCache();    }

16.清理内存缓存

public static void GuideClearMemory(Context mContext) {        //清理内存缓存  可以在UI主线程中进行        Glide.get(mContext).clearMemory();    }

当然,我们后续肯定会功能越来越多的,我把项目开源在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();    }}

有兴趣的可以加入我的Android群:555974449,一起进步如何?

4 0