0Pricing
Android Academy · 课时

使用 Coil 加载图片

使用 Coil 高效加载和缓存网络图片。应用变换(CircleCrop、RoundedCorners),并处理占位图和错误。

使用 Coil 加载图片 是 CoddyKit 上的免费 Android Academy 课时。 这是第 2 节课,共 6 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 6 节课。

为什么需要图像库?

从互联网加载图片,实际比想象中复杂:

  • 在后台线程下载
  • 缓存到磁盘和内存
  • 高效解码(避免 OOM 崩溃)
  • 加载时显示占位图
  • 处理错误(链接失效、无网络)

Coil 用一行代码即可处理所有这些工作。

什么是 Coil?

Coil(Coroutine Image Loader)是一个现代 Android 图像加载库,专为 Kotlin 和协程打造。

  • 轻量 — 比 Glide 或 Picasso 更小
  • Kotlin 优先,并支持协程
  • 感知生命周期 — 自动取消加载
  • 支持 GIF、SVG 和视频帧

添加 Coil

在 app/build.gradle 中添加依赖项:

// app/build.gradle
dependencies {
    implementation 'io.coil-kt:coil:2.6.0'
}

// Also make sure internet permission is in AndroidManifest.xml:
// <uses-permission android:name="android.permission.INTERNET" />

基础图像加载

用一行代码将图片加载到 ImageView 中:

import coil.load

// In your Activity or Adapter:
binding.ivAvatar.load("https://picsum.photos/200")

// With a placeholder and error image:
binding.ivAvatar.load("https://picsum.photos/200") {
    placeholder(R.drawable.ic_placeholder)
    error(R.drawable.ic_error)
    crossfade(true)  // smooth fade-in animation
}

在 RecyclerView 中加载

当 ViewHolder 被回收时,Coil 会自动取消待处理的加载,从而防止错误的图片出现在错误的行中:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val post = getItem(position)

    holder.tvTitle.text = post.title

    holder.ivCover.load(post.imageUrl) {
        placeholder(R.drawable.ic_image_placeholder)
        error(R.drawable.ic_broken_image)
        crossfade(300)  // 300ms fade-in
        size(200, 200)  // resize to 200×200 pixels
    }
}

变换

对加载的图片应用变换:

  • CircleCropTransformation() — 将图片裁剪为圆形(非常适合头像)
  • RoundedCornersTransformation(radius) — 添加圆角
  • BlurTransformation(context, radius) — 添加模糊效果

变换示例

显示圆形用户头像:

import coil.load
import coil.transform.CircleCropTransformation
import coil.transform.RoundedCornersTransformation

// Circular avatar
binding.ivAvatar.load(user.profileImageUrl) {
    transformations(CircleCropTransformation())
    placeholder(R.drawable.ic_default_avatar)
    error(R.drawable.ic_default_avatar)
}

// Rounded corners on a card image
binding.ivCover.load(post.coverUrl) {
    transformations(RoundedCornersTransformation(16f))
    crossfade(true)
}

缓存行为

Coil 会自动在两个层级缓存图片:

  • 内存缓存 — 速度最快,应用被终止时会清除
  • 磁盘缓存 — 在多次启动应用之间保留,默认大小为 250 MB

如果同一个网址被加载两次,第二次加载会直接从缓存中获取,不会发起网络请求。

从不同来源加载

Coil 不仅可以从网址加载图片,还可以从多种来源加载:

// From a URL (most common)
imageView.load("https://example.com/image.jpg")

// From a URI (e.g., gallery image)
imageView.load(uri)

// From a drawable resource
imageView.load(R.drawable.my_image)

// From a File
imageView.load(File("/sdcard/photo.jpg"))

// From a bitmap
imageView.load(bitmap)

快速检查

如果要将用户个人资料照片显示为圆形,您会使用哪种 Coil 变换?

回顾:使用 Coil 加载图片

现在,您已经可以高效地显示网络图片:

  • 只需添加一个 Gradle 依赖项即可引入 Coil
  • imageView.load(url) { } — 一行代码即可加载
  • 设置占位图片和错误备用图片
  • 使用 CircleCrop、RoundedCorners 和 Blur 进行变换
  • 自动在内存和磁盘层级进行缓存
  • 支持网址、URI、文件、可绘制资源和位图

接下来:妥善处理错误,并为用户提供良好的反馈。

常见问题解答

「使用 Coil 加载图片」课时是免费的吗?

是的 — 「使用 Coil 加载图片」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 6 节课。

「使用 Coil 加载图片」这节课中我会学到什么?

使用 Coil 高效加载和缓存网络图片。应用变换(CircleCrop、RoundedCorners),并处理占位图和错误。 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Android Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 6 节。

「使用 Coil 加载图片」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Android Academy 课中编写并运行代码吗?

能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Retrofit 与 REST API
  2. 使用 Coil 加载图片
  3. 错误处理与用户体验
  4. 推送通知
  5. WorkManager 与后台任务
  6. 发布到 Play Store
← 返回 Android Academy