Как я могу скачать изображения, такие как Whatsapp из облачного хранилища - PullRequest
1 голос
/ 26 апреля 2020

Я хочу загружать изображения, такие как WhatsApp, из облачного хранилища, например, когда пользователь находится в Recyclerview, он видит изображения низкого качества, но когда он нажимает на изображение, оно загружает в полном разрешении, в настоящее время я использую библиотеку glide для загрузки изображений. .

В настоящее время я занимаюсь только тем, что загружаю изображения в программе recyclerview в полном разрешении.

 if (user.getImageURL().equals("default")) {
                profile_image.setImageResource(R.drawable.user2);
            } else {
                //and this
                Glide.with(getApplicationContext()).load(user.getImageURL()).into(profile_image);
            }

Ответы [ 2 ]

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

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

  1. Создание триггера облачной функции Firebase при включении загрузить, который возьмет загруженный файл, создаст его некачественную версию и загрузит его в хранилище. Официальный образец для этого дан здесь

  2. Загружайте только изображения низкого качества в изображения в обзоре переработчика. Когда пользователь нажимает на изображение, показывает его в полноэкранном режиме и использует скольжение, чтобы загрузить полное изображение, и задает параметр миниатюры скольжения, чтобы загружать низкокачественное изображение, пока полное изображение не загрузится из inte rnet. С Glide 4.11 это будет выглядеть примерно так:

Glide.with(view)
  .load(fullImageReference)
  .thumbnail(
     Glide.with(view)
          .load(lowImageReference)
  .into(imageView)
1 голос
/ 26 апреля 2020

Используйте CustomTarget из Glide, чтобы передать размеры представления изображения, чтобы Glide мог уменьшить изображения до указанного размера.

Glide.with(this)
    .load(IMAGE_URL)
    .into(object : CustomTarget<Drawable>(targetImageWidth, targetImageHeight) {
        override fun onLoadCleared(placeholder: Drawable?) {
            // called when imageView is cleared. If you are referencing the bitmap 
            // somewhere else too other than this imageView clear it here
        }

        override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
            image.setImageDrawable(resource)
        }
    })

Но что если вы знаете только одно измерение целевого контейнера и не знаете соотношение сторон изображения? Вы вынуждены использовать исходный размер изображения? Оказывается, может быть способ обойти это. В этом случае просто установите другое измерение, которое вы не знаете, равным 1, и Glide автоматически уменьшит изображение.

imageView.viewTreeObserver.addOnGlobalLayoutListener {
    Glide.with(this)
            .load(TargetActivity.IMAGE_URL)
            .into(object : CustomTarget<Drawable>(imageView.width, 1) {
                // imageView width is 1080, height is set to wrap_content
                override fun onLoadCleared(placeholder: Drawable?) {
                    // clear resources
                }

                override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
                    // bitmap will have size 1080 x 805 (original: 1571 x 1171)
                    imageView.setImageDrawable(resource)
                }
            })
}
...