Glide - 加载进阶

Glide — Advanced Loading

Posted by Yuan Fu on February 27, 2016

上周我们了解了用 Glide 的理由和简单的示例来加载一个来自网络的图片。但这不仅仅 Glide 的唯一加载来源。Glide 也能从 Android 资源,文件和 Uri 中加载。在这篇博客中,我们将涉及这三个选项。

Glide 系列预览

  1. 开始!
  2. 加载进阶
  3. ListAdapter(ListView, GridView)
  4. 占位符 和 渐现动画
  5. 图片重设大小 和 缩放
  6. 显示 Gif 和 Video
  7. 缓存基础
  8. 请求优先级
  9. 缩略图
  10. 回调:SimpleTarget 和 ViewTarget 用于自定义视图类
  11. 加载图片到通知栏和应用小部件中
  12. 异常:调试和错误处理
  13. 自定义转换
  14. 用 animate() 自定义动画
  15. 集成网络栈
  16. 用 Module 自定义 Glide
  17. Module 实例:接受自签名证书的 HTTPS
  18. Module 实例:自定义缓存
  19. Module 实例:用自定义尺寸优化加载的图片
  20. 动态使用 Model Loader
  21. 如何旋转图像
  22. 系列综述

从资源中加载

首先从Android 资源中加载,使用一个资源 id (int),来替换之前使用字符串去指明一个网络 URL 的情况。

1
2
3
4
5
6
int resourceId = R.mipmap.ic_launcher;

Glide
    .with(context)
    .load(resourceId)
    .into(imageViewResource);

如果你对于 R.mipmap 有困惑,这是 Android 处理 icon 的新方式

当然,你可以直接为 ImageView 类去设置资源。然而,如果你用的高级话题如动态转换来说,这可能是比较有趣的。

从文件中加载

其次是从文件中加载,当你让用户选择一张照片去显示图像(比如画廊)这可能会比较有用。该参数只是一个文件对象。我们看一个例子:

1
2
3
4
5
6
7
//这个文件可能不存在于你的设备中。然而你可以用任何文件路径,去指定一个图片路径。
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Running.jpg");

Glide
    .with(context)
    .load(file)
    .into(imageViewFile);

从 Uri 中加载

最后,你也指定一个 Uri 来加载图片。该请求和之前的没有什么不同。

1
2
3
4
5
6
7
//这可能是任何 Uri。为了演示的目的我们只是用一个 launcher icon 去创建了一个 Uri 
Uri uri = resourceIdToUri(context, R.mipmap.future_studio_launcher);

Glide
    .with(context)
    .load(uri)
    .into(imageViewUri);

一个小助手功能:简单的从资源 id 转换成 Uri

1
2
3
4
5
6
public static final String ANDROID_RESOURCE = "android.resource://";
public static final String FOREWARD_SLASH = "/";

private static Uri resourceIdToUri(Context context, int resourceId) {
    return Uri.parse(ANDROID_RESOURCE + context.getPackageName() + FOREWARD_SLASH + resourceId);
}

然而, Uri 不必从资源中去生成,它可以是任何 Uri

展望

基本的加载原则已经完成,现在我们可以看看更多有趣的东西。下周我们 在 ListViewGridView 中去适配 adapter。