Glide的使用

  • 主页: https://github.com/bumptech/glide
  • 中文文档: http://mrfu.me/2016/02/27/Glide_Getting_Started/
  • 使用步骤

    1. 添加依赖 compile ‘com.github.bumptech.glide:glide:3.7.0’ , 同时还依赖于supportV4.如果没有请自行添加
    2. 添加权限:

      <uses-permission android:name="android.permission.INTERNET"/>
      
    3. 加载图片.示例代码:

      Glide
              .with(this) // 指定Context
              .load(URL_GIF)// 指定图片的URL
              .placeholder(R.mipmap.ic_launcher)// 指定图片未成功加载前显示的图片
              .error(R.mipmap.ic_launcher)// 指定图片加载失败显示的图片
              .override(300, 300)//指定图片的尺寸
              .fitCenter()//指定图片缩放类型为fitCenter
              .centerCrop()// 指定图片缩放类型为centerCrop
              .skipMemoryCache(true)// 跳过内存缓存
              .diskCacheStrategy(DiskCacheStrategy.NONE)//跳过磁盘缓存
              .diskCacheStrategy(DiskCacheStrategy.SOURCE)//仅仅只缓存原来的全分辨率的图像
              .diskCacheStrategy(DiskCacheStrategy.RESULT)//仅仅缓存最终的图像
              .diskCacheStrategy(DiskCacheStrategy.ALL)//缓存所有版本的图像
              .priority(Priority.HIGH)//指定优先级.Glide 将会用他们作为一个准则,并尽可能的处理这些请求,但是它不能保证所有的图片都会按照所要求的顺序加载。优先级排序:IMMEDIATE > HIGH > NORMAL > LOW
              .into(imageView);//指定显示图片的ImageView
      
    4. 显示圆形图片

      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;
      
              // TODO this could be acquired from the pool too
              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 String getId() {
              return getClass().getName();
          }
      }
      
      Glide
              .with(this) // 指定Context
              .load(URL_GIF)// 指定图片的URL
              .transform(new GlideCircleTransform(this)) // 指定自定义BitmapTransformation
              .into(imageView);//指定显示图片的ImageView
      
    5. 显示圆角图片

      class GlideRoundTransform extends BitmapTransformation {
      
          private static float radius = 0f;
      
          public GlideRoundTransform(Context context) {
              this(context, 4);
          }
      
          public GlideRoundTransform(Context context, int dp) {
              super(context);
              this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
          }
      
          @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
              return roundCrop(pool, toTransform);
          }
      
          private static Bitmap roundCrop(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 = 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 String getId() {
              return getClass().getName() + Math.round(radius);
          }
      }
      
      Glide
              .with(this) // 指定Context
              .load(URL_GIF)// 指定图片的URL
              .transform(new GlideRoundTransform(this,30)) // 指定自定义BitmapTransformation
              .into(imageView);//指定显示图片的ImageView
      
    6. 更改Glide默认配置的步骤:

      1. 创建一个GlideModule的实现类,并在其中更改自己需要的设置.示例代码:

        public class SimpleGlideModule implements GlideModule {
            @Override
            public void applyOptions(Context context, GlideBuilder builder) {
                // 更改Bitmap图片压缩质量为8888,默认为565
                builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
            }
        
            @Override
            public void registerComponents(Context context, Glide glide) {
                // todo
            }
        }
        
      2. 在manifet/Application中添加一个meta-data节点.name值为刚刚创建的GlideModule实现类的完整包名+类名,value值为GlideModule.示例代码:

        <meta-data
            android:name="com.alpha.glidedemo.SimpleGlideModule"
            android:value="GlideModule" />
        
      3. 之后Glide加载图片的时候将会按照新的设置加载.

    图像库对比

  • 快速加载图片推荐Glide
  • 对图片质量要求较高推荐Picasso
  • 如果应用加载的图片很多,推荐Fresco > Glide > Picasso
  • 四种工具比较如图所示
    这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值