如何使用毕加索从一个路径中高效地下载图像以在回收器视图中的同一片段中用于2个图像视图?

时间:2019-04-22 02:08:53

标签: android kotlin picasso

我有一个下载路径。从同一来源,我需要将下载的图像放入两个图像视图中。一个用于普通图像视图,另一个用于模糊图像视图。那两个图像视图彼此重叠。

这些图像视图作为项目位于“回收者”视图中。

我使用下面的代码下载图像,我在下面的第二毕加索代码中使用wasabeef库中的BlurTransformation:

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个图像视图?

Java可以。

0 个答案:

没有答案