Per rendere i lati rimanere sempre sinuosa con qualsiasi altezza, io alla fine up deve creare la forma in modo programmatico come sotto (codice in Kotlin)
class CurvedSidesShape : RectShape() {
override fun draw(canvas: Canvas, paint: Paint?) {
var path = Path()
path.addRoundRect(rect(), rect().height(), rect().height(), Path.Direction.CW)
canvas.drawPath(path, paint)
}
}
Ed ecco come io uso la forma come sfondo tasto
class CurvedSidesButton : Button {
private var mHeight: Int = 0
constructor(context: Context?) : super(context) {
init(context, null, 0, 0)
}
.
.
.
override fun draw(canvas: Canvas?) {
setCurvedSidesBackground(height)
super.draw(canvas)
}
private fun setCurvedSidesBackground(height: Int) {
if (height != mHeight) {
val curvedSidesShape = ShapeDrawable(CurvedSidesShape())
curvedSidesShape.intrinsicWidth = width
curvedSidesShape.intrinsicHeight = height
curvedSidesShape.paint.color = Color.RED
background = curvedSidesShape
mHeight = height
}
}
}
È questo l'altezza e la larghezza fissa? –
@TedHopp non necessariamente –
Sarei tentato di giocare con una lista di livelli disegnabile che avrebbe tre elementi: due cerchi a sinistra ea destra e un rettangolo al centro. Non sono sicuro di come farlo scalare correttamente, però. Inoltre, lasciatemi riformulare la domanda precedente: questa è un'altezza _known_? (Potrebbe essere noto ma non risolto se, ad esempio, l'altezza fosse associata a una risorsa che varia in base alla configurazione del dispositivo.) –