Рисовать закругленные линии. Пользовательский вид

#java #android #kotlin #android-custom-view

#java #Android #kotlin #android-пользовательский вид

Вопрос:

Если процентное значение больше 2, то линии рисуются нормально, но если меньше, то линии перекрываются разделителем (показано на рисунке)

введите описание изображения здесь

Мой код

 var data: List<Item> = mutableListOf(Item(50F), Item(20F), Item(10F), Item(1F), Item(9F))

public override fun onDraw(canvas: Canvas) {
    val radius: Float = height.toFloat() / 2F
    val rectTop: Float = 0F
    val rectBottom: Float = height.toFloat()

    val percentWidth: Float = width.toFloat() / 100F
    var rectRight: Float = width.toFloat()

    //data is List<Item>

    data.asReversed().forEachIndexed { index, item ->
        val rectLeft: Float = rectRight - (percentWidth * item.percent)

        p.color = Color.BLACK
        rectf.set(rectLeft, rectTop, rectRight, rectBottom)
        canvas.drawRoundRect(rectf, radius, radius, p)

        if (index < data.size - 1) {
            // rectangular start
            rectf.set(rectLeft, rectTop, rectRight - radius, rectBottom)
            canvas.drawRoundRect(rectf, 0F, 0F, p)
        }

        // after drawing the line, move the right limit to the place of the beginning of the previous line
        rectRight = rectLeft

        if (index < data.size - 1) {
            // add inner rounding
            p.color = delimiterColor
            rectf.set(rectLeft - lineOffset * 3F, rectTop, rectLeft   lineOffset / 1.4F, rectBottom)
            canvas.drawRoundRect(rectf, radius, radius, p)
        }
    }        
}

data class Item(
    val percent: Float //0.1 to 100.0
)
  

Как вы можете рисовать лучше?

Нам нужен этот результат. Каждый элемент имеет отдельную закругленную линию (начинающуюся внутрь и заканчивающуюся наружу)

введите описание изображения здесь

Комментарии:

1. попробуйте нарисовать по кривой Безье (используйте путь)