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/

Другие вопросы по тегам