// Resource
imageView.load(R.drawable.image)
// File
imageView.load(File(“/path/to/image.jpg”))
同时我们也可以使用 lambda 语法轻松进行图片加载的配置:
imageView.load(“https://www.example.com/image.jpg”) {
crossfade(true)
placeholder(R.drawable.image)
transformations(CircleCropTransformation())
}
================================================================
ImageLoader
ImageLoader 是 Coil 中对于图片加载的大管家,负责处理缓存、数据获取、图像解码、请求管理、Bitmap 缓存池、内存管理等工作,一般建议只创建一个 ImageLoader 并在 App 中进行共享,这样性能是最优的。这是因为每个 ImageLoader 都有自己的内存缓存和 Bitmap 缓存池。
我们可以通过构造器来创建和配置 ImageLoader。
val imageLoader = ImageLoader.Builder(context)
.availableMemoryPercentage(0.25)
.crossfade(true)
.build()
同时由于 ImageLoader 是一个接口,也就意味着我们可以非常方便地进行测试,例如可以注入一个 fake 的 ImageLoader,从而每次都返回相同的 drawable。
val fakeImageLoader = object : ImageLoader {
private val drawable = ColorDrawable(Color.BLACK)
override fun enqueue(request: ImageRequest): Disposable {
request.target?.onStart(drawable)
request.target?.onSuccess(drawable)
return disposable
}
override suspend fun execute(request: ImageRequest): ImageResult {