Android Glide简单用法总结

Glide引入

    //https://github.com/bumptech/glide
    implementation 'com.github.bumptech.glide:glide:4.11.0'

Glide三级缓存

  • 内存缓存,优先加载,速度最快
  • 本地缓存,次优先加载,速度快
  • 网络缓存,最后加载,速度慢,浪费流量
Glide.with(this)
     .load(url)
     .skipMemoryCache(false)//开启内存缓存,默认情况
     .into(imageView);
Glide.with(this)
     .load(url)
     .diskCacheStrategy(DiskCacheStrategy.RESULT)//开启磁盘缓存,默认情况
     .into(imageView);
  • diskCacheStrategy( ) 中可以传入的参数有四种:
    1. DiskCacheStrategy.NONE: 表示不缓存任何内容。
    2. DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
    3. DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。
    4. DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。

Glide的用法

  • 基本用法
    private fun test(ivImg: ImageView) {
        Glide.with(this)
            .load(R.mipmap.ic_image)
            .into(ivImg)
    }
  • 源码可分成三部分
    private fun test(ivImg: ImageView) {
        //第一步
        val requestManager: RequestManager = Glide.with(this)
        //第二步
        val requestBuilder: RequestBuilder<Drawable> = requestManager.load(R.mipmap.ic_image)
        //第三步
        val viewTarget: ViewTarget<ImageView, Drawable> = requestBuilder.into(ivImg)
    }

with

        //第一步
        val requestManager: RequestManager = Glide.with(this)
  • Glide不能在子线程中调用with
    原因是子线程中不会去添加生命周期机制,主线程才会创建空白的Fragment去监听Activity的生命周期变化。
  @NonNull
  public static RequestManager with(@NonNull FragmentActivity activity) {
  	//with方法会调用到get方法
    return getRetriever(activity).get(activity);
  }
  
  @NonNull
  public RequestManager get(@NonNull FragmentActivity activity) {
  	//是否主线程
    if (Util.isOnBackgroundThread()) {
      return get(activity.getApplicationContext());
    } else {
      //主线程中,添加一个空Fragment来监听Activity的生命周期
      assertNotDestroyed(activity);
      FragmentManager fm = activity.getSupportFragmentManager();
      return supportFragmentGet(activity, fm, /*parentHint=*/ null, isActivityVisible(activity));
    }
  }

load

        //第二步
        val requestBuilder: RequestBuilder<Drawable> = requestManager.load(R.mipmap.ic_image)

Glide其他常用参数

 Glide.with(MainActivity.this)
                        //图片地址
                        .load("url")
                        //图片显示大小
                        .override(150,150)
                        //剪切方式,这理选择了centerCrop
                        .centerCrop()
                        //加载时预显示的图片,占位
                        .placeholder(R.drawable.ic_launcher_background)
                        //加载失败后显示的图片
                        .error(R.drawable.ic_launcher_background)
                        //跳过内存缓存
                        .skipMemoryCache(true)
                        //磁盘缓存策略
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .into(imageView);

Glide加载Bitmap的问题

  • 需要先将bitmap对象转换为字节,在加载
ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
            byte[] bytes=baos.toByteArray();

            Glide.with(mContext)
                    .load(bytes)
                    .centerCrop()
//                    .thumbnail(0.1f)   //缩略图为原来的十分之一
                    .override(Utils.px2dip(mContext,130),Utils.px2dip(mContext,130)) //设置大小
                    .placeholder(me.iwf.photopicker.R.drawable.__picker_ic_photo_black_48dp)
                    .error(me.iwf.photopicker.R.drawable.__picker_ic_broken_image_black_48dp)
                    .into(holder.ivPhoto);

设置scaleType

.centerCrop(); // 长的一边撑满
.fitCenter(); // 短的一边撑满

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值