Я пытаюсь создать выпуклый путь для контура провайдера. Мне нужен прямоугольник angular с закругленными верхним левым и верхним правым углами. Есть один метод, который может это сделать, но вопрос: что не так с моим выпуклым путем? Это dr aws на краске, как выпуклый, и геометрически должно быть хорошо.
(да, я знаю о publi c void addRoundRect (float left, float top, float right, float bottom, @NonNull float [] радиусы, @NonNull Direction dir))
Есть реализация моего ConvexView
val Int.toPx: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
class ConvexView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private val paint = Paint().apply {
isAntiAlias = true
color = Color.RED
strokeWidth = 5f
style = Paint.Style.STROKE
}
private val convexPath = Path()
val r = 24.toPx.toFloat()
val d = r * 2
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
with (convexPath) {
reset()
arcTo(0f, 0f, d, d, -90f, -90f, true)
lineTo(0f, measuredHeight.toFloat())
lineTo(measuredWidth.toFloat(), measuredHeight.toFloat())
lineTo(measuredWidth.toFloat(), r)
arcTo(measuredWidth.toFloat() - d, 0f,
measuredWidth.toFloat(), d,
0f, -90f, true)
lineTo(r, 0f)
}
Log.d("CONVEX", "Path is convex = ${convexPath.isConvex}")
}
override fun onDraw(canvas: Canvas?) {
canvas?.save()
canvas?.drawPath(convexPath, paint)
canvas?.restore()
}
}
И результат:
Но путь все еще не выпуклый