Макет элемента моего recyclerView содержит ImageView и пару TextView. Изображение загружается из строки BASE64. Base64 загружается в imageView с помощью библиотеки Glide после преобразования его в массив байтов.
Я знаю, что дрожащая прокрутка вызвана из-за base 64, поскольку я пытался загрузить образец изображения с URL-адреса и после этого прокрутка будет плавной. Но в моем случае я должен использовать Base64, так как это то, как я использую api.
Я попытался добавить код для загрузки изображения из base64 внутри сопрограммы для повышения производительности, но я не вижу ничего
Код для загрузки base64 в ImageView:
fun ImageView.loadBase64(base64String: String) {
val bytes = Base64.decode(base64String, Base64.DEFAULT)
Glide.with(this.context)
.load(bytes)
.thumbnail(0.1f)
.into(object : CustomTarget<Drawable?>() {
override fun onLoadCleared(placeholder: Drawable?) {
}
override fun onResourceReady(
resource: Drawable,
transition: Transition<in Drawable?>?
) {
setImageDrawable(resource)
}
})
}
Мой метод onBindViewHolderView
override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
val item = getItem(position)
item ?: return
// Glide.with(holder.itemView).load("https://st1.bgr.in/wp-content/uploads/2019/07/Xiaomi-Mi-A3-Gadgets-2.jpg").into(holder.productIV)
holder.productIV.loadBase64(item.picture)
holder.priceTV.text = "$ ${item.price}"
holder.titleTV.text = item.titleFormatted
holder.productIV.transitionName = item.id.toString()
holder.itemView.setOnClickListener {
val extras = FragmentNavigatorExtras(
holder.productIV to item.id.toString()
)
it.findNavController().navigate(
HomeFragmentDirections.actionStoreHomeToProductDetail(
item.id,
item.picture,
item.titleFormatted
), extras
)
}
}
Я просто не могу понять, как сделать прокрутку плавной , так как изображение должно быть загружено в метод onBindViewHolder, а изображение должно быть в BASE64, но все же мне нужно выяснить способ загрузки изображения достаточно быстро, чтобы представление ресайклера не выглядело дряблым.