当前位置:网站首页>glide工具类的简单封装

glide工具类的简单封装

2022-08-09 12:04:00 谢栋_

    开题:其实对于图片请求框架,我一直推崇掌握并且熟练使用一个就好,早在很久之前我就对Universal-image-loader写过技术分享博客,鉴于它比较成熟,使用起来也比较稳定,所以在做项目时一般会首选Universal-image-loader,但是对于它如果不在整个项目中不做好规划封装,很容易造成代码冗余,正好最近在写新项目,所以打算尝试下另外几款比较有名的图片加载框架,做了一番对比之后,决定使用Glid。

       本篇博客开头会简单介绍下Glide的简单使用,我会通过几个简单使用Glide的场景来向大家介绍Glide,然后会为大家总结一些Glide常用的方法,在博客的最后我会贴上我在项目中封装的工具类给大家参考。关于Glide的优缺点对比,我就不在此赘述了,网上比比皆是,写此篇博客的目的是为了跟大家一块把这个好用的图片请求框架再进行一次封装,更加方便大家开发使用。

一、Glide使用场景分析

1.使用Glide最基本的加载图片方法

 

 /**
     * 简单获取图片
     *
     * @param path
     * @param view
     */
    public static void getImage(String path, ImageView view) {
        Glide.with(context)
                .load(path)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(view);
    }

2.加载图片时指定被加载图片的大小

 

 /**
     * 根据指定大小加载图片
     *
     * @param path
     * @param width
     * @param height
     * @param imageView
     */
    public static void getImageBySize(String path, int width, int height, ImageView imageView) {
        Glide.with(context)
                .load(path)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .override(width, height)
                .into(imageView);
    }


3.设置加载图片时的animmation动画

 /**
     * 设置加载图片时的动画
     *
     * @param path
     * @param imageView
     * @param anim
     */
    public static void getImageWithAnim(String path, ImageView imageView, int anim) {
        Glide.with(context)
                .load(path)
                .animate(anim)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .into(imageView);
    }


4.甚至是激动人心的加载Gif,都是简单的几行代码来完成,你会发现原来glide加载图片是如此的优雅

/**
     * 加载动态Gif
     *
     * @param path
     * @param imageView
     */
    public static void getImageByDynamicGif(String path, ImageView imageView) {
        Glide.with(context)
                .load(path)
                .asGif()
                .centerCrop()
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(imageView);
    }

 

5.其他图片请求框架有的功能Glide毫不逊色,使用Glide设置加载图片时的监听器

/**
     * 带监听器加载图片
     *
     * @param path
     * @param imageView
     * @param requstlistener
     */
    public static void getImageWithListener(String path, ImageView imageView, RequestListener<String, GlideDrawable> requstlistener) {
        Glide.with(context)
                .load(path)
                .centerCrop()
                .listener(requstlistener)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(imageView);
    }

 

为大家简单梳理几个常见的使用场景,更多方法签名我会在文章最后贴上我基于此封装的GlideUtil工具类供大家参考。

 

二、关于Glide的常用方法

 

1.thumbnail(float sizeMultiplier). 请求给定系数的缩略图。如果缩略图比全尺寸图先加载完,就显示缩
  略图,否则就不显示。系数sizeMultiplier必须在(0,1)之间,可以递归调用该方法。
  2.sizeMultiplier(float sizeMultiplier). 在加载资源之前给Target大小设置系数。
  3.diskCacheStrategy(DiskCacheStrategy strategy).设置缓存策略。DiskCacheStrategy.SOURCE:缓存
  原始数据,DiskCacheStrategy.RESULT:缓存变换(如缩放、裁剪等)后的资源数据,
  DiskCacheStrategy.NONE:什么都不缓存,DiskCacheStrategy.ALL:缓存SOURC和RESULT。
  默认采用DiskCacheStrategy.RESULT策略,对于download only操作要使用DiskCacheStrategy.SOURCE。
  4.priority(Priority priority).     指定加载的优先级,优先级越高越优先加载,但不保证所有图片
  都按序加载。枚举Priority.IMMEDIATE,Priority.HIGH,
  Priority.NORMAL,Priority.LOW。默认为Priority.NORMAL。
  5.dontAnimate(). 移除所有的动画。
  6.animate(int animationId). 在异步加载资源完成时会执行该动画。
  7.animate(ViewPropertyAnimation.Animator animator). 在异步加载资源完成时会执行该动画。
  8.placeholder(int resourceId).    设置资源加载过程中的占位Drawable。
  9.placeholder(Drawable drawable). 设置资源加载过程中的占位Drawable。
  10.fallback(int resourceId).      设置model为空时要显示的Drawable。如果没设置fallback,
  model为空时将显示error的Drawable,如果error的Drawable也没设置,
  就显示placeholder的Drawable。
  11.fallback(Drawable drawable).设置model为空时显示的Drawable。
  12.error(int resourceId).设置load失败时显示的Drawable。
  13.error(Drawable drawable).设置load失败时显示的Drawable。
  14.listener(RequestListener<? super ModelType, TranscodeType> requestListener). 监听资源加
 载的请求状态,可以使用两个回调:onResourceReady(R resource, T model,
 Target<R> target, boolean isFromMemoryCache, boolean isFirstResource)
 和onException(Exception e, T model, Target<R> target, boolean isFirstResource)
 但不要每次请求都使用新的监听器,要避免不必要的内存申请,可以使用单例进行统一的异常监听和处理。
 15.skipMemoryCache(boolean skip). 设置是否跳过内存缓存,但不保证一定不被缓存
 (比如请求已经在加载资源且没设置跳过内存缓存,这个资源就会被缓存在内存中)。
 16.override(int width, int height). 重新设置Target的宽高值(单位为pixel)。
 17.into(Y target).设置资源将被加载到的Target。
 18.into(ImageView view).   设置资源将被加载到的ImageView。取消该ImageView之前所有的加载并释放资源。
 19.into(int width, int height).     后台线程加载时要加载资源的宽高值(单位为pixel)。
 20.preload(int width, int height).  预加载resource到缓存中(单位为pixel)。
 21.asBitmap(). 无论资源是不是gif动画,都作为Bitmap对待。如果是gif动画会停在第一帧。
 22.asGif().把资源作为GifDrawable对待。如果资源不是gif动画将会失败,会回调.error()。

三、基于Glide简单封装的工具类

 

/**
 * Glide简单封装
 * Created by 谢栋 on 2017/10/26.
 */

public class GlideUtil {

    private static Context context = AppManage.getInstance().currentActivity();

    /**
     * 简单获取图片
     *
     * @param path
     * @param view
     */
    public static void getImage(String path, ImageView view) {
        Glide.with(context)
                .load(path)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(view);
    }

    /**
     * 根据指定大小加载图片
     *
     * @param path
     * @param width
     * @param height
     * @param imageView
     */
    public static void getImageBySize(String path, int width, int height, ImageView imageView) {
        Glide.with(context)
                .load(path)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .override(width, height)
                .into(imageView);
    }

    /**
     * 指定加载等待跟加载失败图片
     *
     * @param path
     * @param imageView
     * @param errorRes
     * @param loadingRes
     */
    public static void getImageWithErrorLoadingImg(String path, ImageView imageView, int errorRes, int loadingRes) {
        Glide.with(context)
                .load(path)
                .placeholder(loadingRes)
                .error(errorRes)
                .into(imageView);
    }


    /**
     * 是否跳过内存加载
     *
     * @param path
     * @param view
     * @param isSkipMemoryCache
     */
    public static void getImage(String path, ImageView view, boolean isSkipMemoryCache) {
        Glide.with(context)
                .load(path)
                .skipMemoryCache(isSkipMemoryCache)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .into(view);
    }

    /**
     * 设置加载图片时的动画
     *
     * @param path
     * @param imageView
     * @param anim
     */
    public static void getImageWithAnim(String path, ImageView imageView, int anim) {
        Glide.with(context)
                .load(path)
                .animate(anim)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .into(imageView);
    }

    /**
     * 加载动态Gif
     *
     * @param path
     * @param imageView
     */
    public static void getImageByDynamicGif(String path, ImageView imageView) {
        Glide.with(context)
                .load(path)
                .asGif()
                .centerCrop()
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(imageView);
    }

    /**
     * 加载静态Gif
     *
     * @param path
     * @param imageView
     */
    public static void getImageByStaticGif(String path, ImageView imageView) {
        Glide.with(context)
                .load(path)
                .asBitmap()
                .centerCrop()
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(imageView);
    }

    /**
     * 加载图片centerCrop()
     *
     * @param path
     * @param view
     */
    public static void getImageCenterCrop(String path, ImageView view) {
        Glide.with(context)
                .load(path)
                .centerCrop()
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(view);
    }


    /**
     * 带监听器加载图片
     *
     * @param path
     * @param imageView
     * @param requstlistener
     */
    public static void getImageWithListener(String path, ImageView imageView, RequestListener<String, GlideDrawable> requstlistener) {
        Glide.with(context)
                .load(path)
                .centerCrop()
                .listener(requstlistener)
                .placeholder(R.drawable.icon_calendar)
                .error(R.drawable.error_circle)
                .priority(Priority.NORMAL) //下载优先级
                .into(imageView);
    }

    /**
     * 清理内存缓存
     */
    public static void clearMemaryCache() {
        Glide.get(context)
                .clearMemory();
    }

    /**
     * 清理磁盘缓存
     */
    public static void clearDiskCache() {
        Glide.get(context)
                .clearDiskCache();
    }
    
}

 

 

 

 

 

 

原网站

版权声明
本文为[谢栋_]所创,转载请带上原文链接,感谢
https://xiedong.blog.csdn.net/article/details/78354570