Как использовать представление (мерцание) в качестве заполнителя для imageView (Glide) - PullRequest
0 голосов
/ 07 апреля 2020

Я использую Glide для загрузки изображений в мой imageView (который находится внутри утилита просмотра):

Glide.with(image.context).load(url)
        .error(context.getDrawable(R.drawable.placeholder))
        .into(image)

Я вижу, что библиотека Glide также имеет функцию "заполнителя", которая дает возможность загружать Нарисованный для отображения, когда изображение все еще загружается.

С другой стороны, для всего RecyclerView я использую библиотеку Facebook Shimmer , чтобы показать, что загружается представление переработчика.

Глядя на мое приложение, все отлично работает. Тем не менее, все еще существует промежуток времени между тем, когда Shimmer отклоняется (данные выбираются) и изображением показывается. Это как раз тогда, когда требуется заполнитель. Мне интересно, есть ли способ использовать Shimmer в качестве заполнителя для imageView? Функция Placeholder в Glide поддерживает только Drawable, а Shimmer - это View.

В любом случае, чтобы преобразовать Shimmer в Drawable? или GIF? Или любое другое предложение?

Ответы [ 2 ]

1 голос

Я разработал библиотеку для простого добавления эффектов загрузки мерцания / скелета. https://github.com/AgnaldoNP/AGSkeletonLoading

На README.md есть объяснение, как его использовать. Вам не нужно добавлять кучу макетов для эмуляции скелета, он рассчитывается автоматически. Макет, используемый для показа скелета, - это то же самое, что и содержимое.

Если вы используете SkeletonImageView для файла макета, вы просто вызовете startLoading () и stopLoading () для управления анимацией. Я надеюсь, что помог вам

1 голос
/ 07 апреля 2020

Благодаря комментарию Майка, приведенному выше: существует класс ShimmerDrawable, в котором вы можете создать представление мерцания в качестве отрисовки, которое можно использовать в Glide:

private val shimmer = Shimmer.AlphaHighlightBuilder()// The attributes for a ShimmerDrawable is set by this builder
    .setDuration(1800) // how long the shimmering animation takes to do one full sweep
    .setBaseAlpha(0.7f) //the alpha of the underlying children
    .setHighlightAlpha(0.6f) // the shimmer alpha amount
    .setDirection(Shimmer.Direction.LEFT_TO_RIGHT)
    .setAutoStart(true)
    .build()

// This is the placeholder for the imageView
    val shimmerDrawable = ShimmerDrawable().apply {
        setShimmer(shimmer)
    }


Glide.with(image.context).load(url)
        .placeholder(shimmerDrawable)
        .error(context.getDrawable(R.drawable.placeholder))
        .into(image)
...