我正在使用 COIL 库将图像从 URL 加载到 ImageView 中,并且在实现暗模式时遇到问题。
在我的应用程序中,我有一个 RecyclerView,其中每个项目都有一个图像。由于加载是异步的,我有一个可绘制的占位符来显示,直到加载图像。
我正在使用的扩展功能是这样的:
/**
* Load image with placeholder and crossfade animation
*/
private fun ImageView.loadImageWithPlaceholder(
url: String,
onSuccess: (() -> Unit)? = null,
onError: (() -> Unit)? = null
) {
load(url) {
placeholder(R.drawable.ic_sheikah_placeholder)
crossfade(Constants.CROSSFADE_DURATION_MILLIS)
listener(onSuccess = { _, _ ->
onSuccess?.invoke()
}, onError = { _, _ ->
onError?.invoke()
})
}
}
在我使用 MaterialComponents 主题实现暗/亮模式之前,一切都运行良好。现在我有两个占位符图像,分别在 drawable-Xdpi 和 drawable-night-Xdpi 中。
在黑暗模式下,一切都按预期工作。但是在浅色模式下,当我使用 RecyclerView 打开 Activity 或进行快速滚动时,显示的占位符瞬间是深色模式。在那一刻之后,显示正确的占位符图像,然后用从服务器加载的图像替换。我曾尝试禁用 COIL 缓存,但似乎没有任何效果,而且我无法找出问题所在。