Android App中使用Glide加载图片的教程

2019-12-10 18:06:24于海丽

那么客户端如何根据不同的手机分辨率去加载不同的url呢?

 

Google是这样做的,下面是核心代码:

//定义正则表达式
private static final Pattern PATTERN =
   Pattern.compile("__w-((?:-?d+)+)__");

@Override
protected String getUrl(String model, int width, int height) {
  Matcher m = PATTERN.matcher(model);
  int bestBucket = 0;
  if (m.find()) {
    String[] found = m.group(1).split("-");//拿到可以加载的尺寸数组
    for (String bucketStr : found) {
      bestBucket = Integer.parseInt(bucketStr);
      if (bestBucket >= width) {//刚好大于要加载的尺寸,直接跳出循环
        // the best bucket is the first immediately
        // bigger than the requested width
        break;
      }
    }
    if (bestBucket > 0) {//返回合适尺寸的url
      model = m.replaceFirst("w"+bestBucket);
    }
  }
  return model;
}

大概的步骤如下:
1.根据服务端可加载的图片url定义正则表达式
2.根据正则匹配,获取到可以加载的图片尺寸数组
3.根据要加载的Imageview的大小,选择合适的尺寸的url
4.拼接url并返回

上面的例子中有200,400,600,800,1000是可以加载的,如果你要加载的Imageview的大小为600px,当遍历数组到600时,就会直接跳出循环,返回600px大小图片的url,Glide就会加载600px的图片。

异常调试
在Glide加载图片过程中出现异常时,默认是没有log输出的。但是Glide给开发者提供了两种方法来查看或者响应这些异常。
1.调试
为了在异常发生时可以看到它们,你可以打开Glide中处理所有媒体加载响应的类GenericRequest的log开关。很简单,在命令行运行下面的指令即可:

adb shell setprop log.tag.GenericRequest DEBUG

如果你将DEBUG替换为VERBOSE,还可以看到详细的请求时间日志。