I have one download path. from that same source, I need to place the downloaded image into two image views. one for normal image view, and another is for blurred image view. those two image views overlap each other.
those image views is located as item in the recycler view.
I use the code below to download the image, I use BlurTransformation from wasabeef library in the seconde picasso code below:
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)
}
these code can work, but I am worried. because it seems slow to download those 2 image. I assume it will download 2 images even though the source is only one. so maybe it is not efficient way.
I have tried some way. like using Target interface like below
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)
}
})
}
but if I use this code, sometimes the bitmap from onBitmapLoaded
is null, so the image sometimes will not appear.
I have tried the third way using onSuccess listener like the code below:
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?) {
}
})
}
but the problem is, the image seems inconsistent, I mean, for a few seconds, the image that should appear in item 1 will appear in item 5 or item 7 if I scroll down the recycler view, even though it eventually located in the right order, If I scroll to the bottom of recycler view
so how to efficiently download image from one path to be used into 2 image views in the same fragment in recycler view using picasso ?
Java is Okay.