Android COIL загружает ночной заполнитель, который можно нарисовать в светлом режиме на мгновение
Я использую библиотеку 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.
В темном режиме все работает по назначению. Но в светлом режиме, когда я открываю Activity с помощью RecyclerView или когда я делаю быструю прокрутку, на мгновение показанный заполнитель является темным режимом. После этого отображается правильное изображение-заполнитель, которое позже заменяется изображением, загруженным с сервера. Я попытался отключить кеш COIL, но, похоже, ничего не работает, и я не могу понять, в чем проблема.
1 ответ
Я столкнулся с той же проблемой. переход на катушку 2.X решил эту проблему. https://coil-kt.github.io/coil/upgrading/