Я должен нарисовать CustomView, как этот снимок. ![enter image description here](https://i.stack.imgur.com/l4rGe.png)
но они не одинаковы. угловые штрихи разные.
Я использую 2 отдельных Path
, чтобы нарисовать верхнюю фигуру:
первый на желтом фоне:
private val paint = Paint().apply {
isAntiAlias = false // pass true does not make change
color = Color.YELLOW
style = Paint.Style.FILL_AND_STROKE // pass only FILL does not make change
}
а второй:
private val strokePaint = Paint().apply {
isAntiAlias = false // pass true does not make change
color = Color.BLACK
strokeWidth = 2.toPx().toFloat()
style = Paint.Style.STROKE
}
и в onDraw()
функции, которые я рисую ими:
override fun onDraw(canvas: Canvas) {
drawPath()
canvas.drawPath(path, paint)
canvas.drawPath(path, strokePaint)
// at the end, draw text and default things to avoid overlapping with background
super.onDraw(canvas)
}
Обновление :
Теперь я нарисовал это, у которого есть 2 стороны для указателя
![enter image description here](https://i.stack.imgur.com/ntllx.png)
и использовал этот путь для рисования:
private fun drawPath() {
path.run {
moveTo(left + radius, top)
if (_side == SIDE_TOP) {
lineTo(pointerX - pointerSize / 2, top)
lineTo(pointerX, rect.top)
lineTo(pointerX + pointerSize / 2, top)
}
lineTo(right - radius, top)
arcTo(topRightRect, 270F, 90F, false)
lineTo(right, bottom - radius)
arcTo(bottomRightRect, 0F, 90F, false)
if (_side == SIDE_BOTTOM) {
lineTo(pointerX + pointerSize / 2, bottom)
lineTo(pointerX, rect.bottom)
lineTo(pointerX - pointerSize / 2, bottom)
}
lineTo(left + radius, bottom)
arcTo(bottomLeftRect, 90F, 90F, false)
lineTo(left, top + radius)
arcTo(topLeftRect, 180F, 90F, false)
close()
}
}