Glide/Coil 用于 Kotlin:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Glide 和 Coil,为什么需要它们?

\n\n

在现代 Android 开发中,从网络、本地文件或资源加载和显示图像是最常见的任务之一。然而,仅仅下载图片并在 ImageView 中显示是不够的。需要考虑许多细节:缓存(以节省流量)、错误处理(如果图片未加载)、变换(圆形头像、模糊)、支持 GIF 和视频,以及平滑的显示动画。

\n\n

Glide 和 Coil 是 Kotlin/Android 中最流行的两个图像加载库。它们开箱即用地解决了上述所有问题。

\n\n
    \n
  • Glide — 一个强大、成熟的库(部分由 Google 支持)。支持 GIF、视频、变换、动画。拥有庞大的社区。
  • \n
  • Coil — 更现代、轻量级,完全用 Kotlin 编写并使用协程。与 Jetpack Compose 完美集成。
  • \n
\n\n

在本文中,我们将介绍这两个库,因为它们解决相同的问题,但方式不同。您可以选择更适合您项目的那个。

\n\n

安装

\n\n

将依赖项添加到 build.gradle.kts 文件(模块级别 app):

\n\n

对于 Glide:

\n
dependencies {\n    implementation("com.github.bumptech.glide:glide:4.16.0")\n    kapt("com.github.bumptech.glide:compiler:4.16.0") // 用于 GlideApp\n}
\n\n

对于 Coil:

\n
dependencies {\n    implementation("io.coil-kt:coil:2.6.0")\n    // 如果您使用 Compose:\n    implementation("io.coil-kt:coil-compose:2.6.0")\n}
\n\n

添加后,同步项目(Sync Now)。

\n\n

快速入门

\n\n

让我们从网络加载一张简单的图片到 ImageView。

\n\n

使用 Glide 的示例:

\n
// 在 Activity 或 Fragment 中\nval imageView: ImageView = findViewById(R.id.my_image_view)\nval url = "https://example.com/image.jpg"\n\nGlide.with(this)\n    .load(url)\n    .into(imageView)
\n\n

使用 Coil 的示例:

\n
// 在 Activity 或 Fragment 中\nval imageView: ImageView = findViewById(R.id.my_image_view)\nval url = "https://example.com/image.jpg"\n\nimageView.load(url)
\n\n

如您所见,Coil 通过扩展函数 load() 提供了更简洁的语法。

\n\n

主要方法和函数

\n\n

以下是处理图像的关键方法。对于每个方法,我将展示两个库的示例。

\n\n

1. load() — 加载图像

\n

功能: 主要方法,接受图像源(URL、URI、File、Drawable、Bitmap)。

\n

参数:

\n
    \n
  • url: String — 图像链接。
  • \n
  • uri: Uri — 本地 URI。
  • \n
  • file: File — 文件。
  • \n
  • resourceId: Int — 资源 ID(R.drawable...)。
  • \n
\n

示例(Glide):

\n
Glide.with(this)\n    .load("https://example.com/photo.png")\n    .into(imageView)
\n

示例(Coil):

\n
imageView.load("https://example.com/photo.png")
\n\n

2. placeholder() — 占位图像

\n

功能: 在主图像加载时显示临时图片。

\n

参数:

\n
    \n
  • placeholder: Int — drawable 资源 ID。
  • \n
\n

示例(Glide):

\n
Glide.with(this)\n    .load(url)\n    .placeholder(R.drawable.ic_loading)\n    .into(imageView)
\n

示例(Coil):

\n
imageView.load(url) {\n    placeholder(R.drawable.ic_loading)\n}
\n\n

3. error() — 错误时显示的图像

推荐