Glide4.*图片加载工具类

glide3升级到glide4.*版本,使用上有一些变化,下面一个常用的简单加载图片工具类:

/**
 * 图片加载工具类
 * Created by Administrator on 2017/12/5 0005.
 */

public class ImageLoaderUtils {

    private static final String TAG = "ImageLoaderUtils";

    /**
     * 圆角图片加载
     * @author leibing
     * @createTime 2016/8/15
     * @lastModify 2016/8/15
     * @param context 上下文
     * @param imageView 图片显示控件
     * @param url 图片链接
     * @param defaultImage 默认占位图片
     * @param errorImage 加载失败后图片
     * @param radius 图片圆角半径
     * @return
     */
    public static void load(Context context, ImageView imageView, String url, int defaultImage,
                            int errorImage , int radius){
        //RequestOptions 设置请求参数,通过apply方法设置
        RequestOptions options = new RequestOptions()
                // 但不保证所有图片都按序加载
                // 枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW
                // 默认为Priority.NORMAL
                // 如果没设置fallback,model为空时将显示error的Drawable,
                // 如果error的Drawable也没设置,就显示placeholder的Drawable
                .priority(Priority.NORMAL) //指定加载的优先级,优先级越高越优先加载,
                .placeholder(defaultImage)
                .error(errorImage)
                // 缓存原始数据
                .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
                .centerCrop()
                .transform(new CornersTranform(context, radius));
        // 图片加载库采用Glide框架
        Glide.with(context).load(url).apply(options)
                .transition(new DrawableTransitionOptions().crossFade())
                .into(imageView);

    }

    /**
     * 加载resoures下的文件
     * @param context
     * @param imageView
     * @param url
     * @param defaultImage
     * @param errorImage
     */
    public static void loadImgId(Context context, final ImageView imageView, int url, int defaultImage,
                                 int errorImage, int radius) {
        RequestOptions options = new RequestOptions()
                // 但不保证所有图片都按序加载
                // 枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW
                // 默认为Priority.NORMAL
                // 如果没设置fallback,model为空时将显示error的Drawable,
                // 如果error的Drawable也没设置,就显示placeholder的Drawable
                .priority(Priority.NORMAL) //指定加载的优先级,优先级越高越优先加载,
                .placeholder(defaultImage)
                .error(errorImage)
                // 缓存原始数据
                .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
                .centerCrop()
                .transform(new CornersTranform(context, radius));
        // 图片加载库采用Glide框架
        Glide.with(context).load(url)
                .apply(options)
                .transition(new DrawableTransitionOptions().crossFade())
                .into(imageView);
    }

    /**
     * 加载圆形头像
     * @param context
     * @param imageView
     * @param url
     * @param defaultImage
     * @param errorImage
     */
    public static void loadCircle(Context context, final ImageView imageView, String url, int defaultImage,
                                  int errorImage) {
        RequestOptions options = new RequestOptions()
                // 但不保证所有图片都按序加载
                // 枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW
                // 默认为Priority.NORMAL
                // 如果没设置fallback,model为空时将显示error的Drawable,
                // 如果error的Drawable也没设置,就显示placeholder的Drawable
                .priority(Priority.NORMAL) //指定加载的优先级,优先级越高越优先加载,
                .dontAnimate() //防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
                .placeholder(defaultImage)
                .error(errorImage)
                // 缓存原始数据
                .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
                .centerCrop()
                .transform(new GlideCircleTransform(context));
        // 图片加载库采用Glide框架
        Glide.with(context).load(url)
                .apply(options)
                .transition(new DrawableTransitionOptions().crossFade())
                .into(new SimpleTarget<Drawable>() {
                    @Override
                    public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
                        imageView.setImageDrawable(resource);
                    }
                });
    }
  }

圆角图片处理类:

/**
 * glide处理圆角图片
 * Created by Administrator on 2017/12/13 0013.
 */

public class CornersTranform extends BitmapTransformation {
    private float radius;

    public CornersTranform(Context context) {
        super(context);
        radius = 10;
    }

    public CornersTranform(Context context, float radius) {
        super(context);
        this.radius = radius;
    }

    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return cornersCrop(pool, toTransform);
    }

    private Bitmap cornersCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);

        if (result != null && !result.isRecycled()){
            result.recycle();
            result = null;
        }

        if (result == null) {
            result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        }
        Canvas canvas = new Canvas(result);
        Paint paint  = new Paint();
        paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
        canvas.drawRoundRect(rectF, radius, radius, paint);
        return result;
    }

    @Override
    public void updateDiskCacheKey(MessageDigest messageDigest) {

    }
}

圆形图片处理:

/**
 * glide加载圆形图片
 * Created by Administrator on 2018/2/3 0003.
 */

public class GlideCircleTransform extends BitmapTransformation{
    public GlideCircleTransform(Context context) {
        super(context);
    }
    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return circleCrop(pool, toTransform);
    }
    private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;
        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;
        Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

        Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        float r = size / 2f;
        canvas.drawCircle(r, r, r, paint);

        return result;
    }

    @Override
    public void updateDiskCacheKey(MessageDigest messageDigest) {

    }
}

使用时只需要调用相应的图片加载方法:

ImageLoaderUtils.load(this, holder.ivRecommendImg, url, R.drawable.normal_loading, R.drawable.normal_error, 20);

页面销毁时, 在onstop方法中取消图片加载请求:

@Override
public void onStop() {
    super.onStop();
    Glide.with(this).pauseRequests();
}

在onresume方法中恢复图片加载请求:

 @Override
 public void onResume() {
    super.onResume();
    Glide.with(this).resumeRequests();
 }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值