У меня есть набор из двух функций, которые я использую для привязки изображений к recyclerview, одна предназначена для преобразования строки (base64) в растровое изображение, другая функция - для округления углов указанного изображения.
//convert string to bitmap
fun stringToBitMap( encodedString: String): Bitmap? {
println("string to bitmap is being called")
return try {
val encodeByte: ByteArray = Base64.decode(encodedString, Base64.DEFAULT)
BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.size)
} catch (e: Exception) {
println("Failed to convert string to bitmap")
e.message
null
}
}
//round corners
fun getRoundedCornerBitmap(bitmap: Bitmap, pixels: Int): Bitmap {
println("get rounded corners is being called")
val output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(output)
val color = -0xbdbdbe
val paint = Paint()
val rect = Rect(0, 0, bitmap.width, bitmap.height)
val rectF = RectF(rect)
val roundPx = pixels.toFloat()
paint.isAntiAlias = true
canvas.drawARGB(0, 0, 0, 0)
paint.color = color
canvas.drawRoundRect(rectF, roundPx, roundPx, paint)
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
canvas.drawBitmap(bitmap, rect, rect, paint)
return output
}
и я аннотирую свою последнюю функцию с помощью BindingAdapter, затем я вызываю функцию из файла xml
@BindingAdapter("poster")
fun image (view: ImageView, image: String) {
return view.setImageBitmap(stringToBitMap(image)?.let { getRoundedCornerBitmap(it, 10) })
}
, она работает, но производительность на некоторых устройствах низкая, я отлаживаю свое приложение в телефон с низким ресурсом (samsung SM-J106B) и всплески использования процессора составляют 35% при быстрой прокрутке (мои изображения не высокого разрешения, только 400x400), также recyclerview продолжает вызывать эти функции, и это делает прокрутку своего рода медленным sh. Итак, вопрос в том, как я могу улучшить свои функции?
pd: im a complete newb ie: (