Как установить растровое изображение в центре в kotlin - PullRequest
0 голосов
/ 18 июня 2020

Как я могу установить растровое изображение в центре, оно не в центре. Вот мой код и экран. Я так много пробовал, но не смог решить это

fun onDraw(c: Canvas, rectF: RectF, pos: Int) {
    val p = Paint()
    p.color = color
    c.drawRect(rectF, p)

    p.color = Color.WHITE
    p.textSize - textSize.toFloat()

    var r = Rect()
    val cHeight = rectF.height()
    val cWidth = rectF.width()
    p.textAlign = Paint.Align.RIGHT
    p.getTextBounds(text, 0, text.length, r)

    var x = 0f
    var y = 0f
    if (imageResId == 0) {

        x = cWidth / 2f - r.width() / 2f - r.left.toFloat()
        y = cHeight / 2f + r.height() / 2f - r.bottom.toFloat()
        c.drawText(text, rectF.left + x, rectF.top + y, p)

    } else {
        val d = ContextCompat.getDrawable(context, imageResId)
        val bitmap = drawableToBitmap(d!!)
        c.drawBitmap(
            bitmap,
            (rectF.left + rectF.right) / 2,
            (rectF.top + rectF.bottom) / 2,
            p
        )

    }

    clickRegion = rectF
    this.pos = pos
}

Вот ссылка на изображение, которое создается ошибка введите описание ссылки здесь

 private fun drawableToBitmap(d: Drawable?): Bitmap {

    if (d is BitmapDrawable) return d.bitmap
    val bitmap =
        Bitmap.createBitmap(d!!.intrinsicWidth, d.intrinsicHeight, Bitmap.Config.ARGB_8888)
    var canvas = Canvas(bitmap)
    d.setBounds(0, 0, canvas.width, canvas.height)

    d.draw(canvas)
    return bitmap
}

1 Ответ

0 голосов
/ 18 июня 2020

Вы можете видеть, что все ваши чертежи находятся в центре и рисуют оттуда, все, что вы делаете, правильно, вам просто нужно просто смещение с помощью:

Вычесть половина вытягиваемых ширина и высота от start position

Красный до Зеленый

enter image description here

Фрагмент кода

    c.drawBitmap(
        bitmap,
        (rectF.left + rectF.right) / 2,
        (rectF.top + rectF.bottom) / 2,
        p
    )

Кому

    c.drawBitmap(
        bitmap,
        (rectF.left + rectF.right - bitmap.width) / 2,
        (rectF.top + rectF.bottom - bitmap.height) / 2,
        p
    )
...