как я могу улучшить эти функции для привязки растровых изображений в recyclerView? - PullRequest
0 голосов
/ 11 июля 2020

У меня есть набор из двух функций, которые я использую для привязки изображений к 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: (

1 Ответ

0 голосов
/ 02 августа 2020

В итоге я использовал скольжение вот так:

    fun poster(view: ImageView, image: String) {
    val imageByteArray: ByteArray = Base64.decode(image, Base64.DEFAULT)
    val round = RequestOptions
        .bitmapTransform(RoundedCorners(14))

    Glide.with(view)
        .load(imageByteArray)
        .apply(round)
        .into(view)
}

производительность теперь лучше: D

...