Как эффективно загрузить изображение из одного пути для использования в 2 представлениях изображения в том же фрагменте в представлении рециркулятора, используя Пикассо? - PullRequest
0 голосов
/ 22 апреля 2019

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

эти виды изображений расположены в виде элемента в представлении утилизатора.

Я использую приведенный ниже код для загрузки изображения, я использую BlurTransformation из библиотеки wasabeef вВторой код Пикассо ниже:

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

    val currentEvent = getItem(position)
    val recommendedEventViewHolder = holder as RecommendedEventViewHolder


    Picasso.get()
        .load(currentEvent.posterDownloadPath)
        .into(recommendedEventViewHolder.posterImageView)


    Picasso.get()
        .load(currentEvent.posterDownloadPath)
        .transform(BlurTransformation(mContext,25,3))
        .into(recommendedEventViewHolder.blurryImageView)


}

этот код может работать, но я волнуюсь.потому что, кажется, медленно загружать эти 2 изображения.Я предполагаю, что он загрузит 2 изображения, хотя источник только один.так что, возможно, это не эффективный способ.

Я пробовал каким-то образом.как при использовании целевого интерфейса, как показано ниже

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

    val currentEvent = getItem(position)
    val recommendedEventViewHolder = holder as RecommendedEventViewHolder



    Picasso.get()
        .load(currentEvent.posterDownloadPath)
        .into(object: Target {
            override fun onPrepareLoad(placeHolderDrawable: Drawable?) {

            }

            override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {

            }

            override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
                recommendedEventViewHolder.posterImageView.setImageBitmap(bitmap)
                recommendedEventViewHolder.blurryImageView.setImageBitmap(bitmap)
            }

        })


}

, но если я использую этот код, иногда растровое изображение из onBitmapLoaded равно нулю, поэтому изображение иногда не отображается.

Я пробовалТретий способ использования слушателя onSuccess, подобный приведенному ниже:

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

        val currentEvent = getItem(position)
        val recommendedEventViewHolder = holder as RecommendedEventViewHolder

        Picasso.get()
            .load(currentEvent.posterDownloadPath)
            .into(recommendedEventViewHolder.posterImageView, object : com.squareup.picasso.Callback {
                override fun onSuccess() {

                    val downloadedBitmap =
                        (recommendedEventViewHolder.posterImageView.drawable as BitmapDrawable).bitmap
                    recommendedEventViewHolder.posterImageView.setImageBitmap(downloadedBitmap)
                    recommendedEventViewHolder.blurryImageView.setImageBitmap(downloadedBitmap)

                }

                override fun onError(e: Exception?) {

                }

            })

    }

, но проблема в том, что изображение кажется непоследовательным, я имею в виду, что в течение нескольких секунд изображение, которое должно появиться в пункте 1, появится в пункте 5или пункт 7, если я прокручиваю вниз представление рециркулятора, даже если оно в конечном итоге расположено в правильном порядке, если я прокручиваю до нижней части окна рециркуляции

, как эффективно загрузить изображение из одного пути, который будет использоваться в 2представления изображения в том же фрагменте в представлении переработчика, используя Пикассо?

Ява в порядке.

...