studio radius example create android drawable shapedrawable

radius - shape imageview android



¿Cómo puedo crear un rectángulo con dos lados curvos en XML dibujable? (10)

¡Ha funcionado bien!

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/color_red"/> <corners android:radius="10000dp" /> </shape>

Quiero que los lados izquierdo y derecho (no las esquinas) del rectángulo estén curvados. O diga los lados superior e inferior de una forma ovalada recta.

¿Cómo puedo lograr algo como esto?


Creo que una de las mejores ideas es crear formas usando xml fiel.

Crear Drawable-> ovalshape.xml

<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#ff0000" /> <corners android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" /> <padding android:bottom="5dip" android:left="10dip" android:right="10dip" android:top="5dip" /> </shape>

Ahora puede usar este xml instead of image fácilmente. Creo que esto es útil para you and new SO user .


Definir la altura y hacer la mitad del radio de la altura.


Intente establecer el radio del borde a la mitad de la altura. En CSS, border-radius:50% crea una elipse, así que supongo que si es solo el 50% de la altura, obtendrías algo así.


Intente esto en la vista de texto, para un solo carácter mostrará un círculo, para múltiples dígitos se expandirá automáticamente a la forma que mostró anteriormente, pero si desea estrictamente la forma anterior, simplemente proporcione un relleno más grande a la izquierda y a la derecha

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <padding android:top="3dp" android:left="8dp" android:right="8dp" android:bottom="3dp"/> <solid android:color="#E6121A" /> <corners android:bottomLeftRadius="12dp" android:bottomRightRadius="12dp" android:topLeftRadius="12dp" android:topRightRadius="12dp" /> </shape>


La forma más fácil es usar una imagen de 9 parches (una imagen png que termina en image.9.png) y tener un borde de píxeles adicional que define cómo escalar la imagen.

Otra forma es crear un archivo de forma en la carpeta res / drawable así.

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#ff0000"/> </shape>

más información sobre formas here


Llego un poco tarde y la respuesta no debe ser totalmente completa (no considero las alturas flexibles), pero al menos si sabemos de antemano la altura en dp, el truco es tener el radio como la mitad de la altura del botón. . Por ejemplo, si la altura fuera 48dp, podríamos hacer algo como:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ff0000"/> <corners android:radius="24dp" /> </shape>


Para que los lados permanezcan siempre con curvas a cualquier altura, tengo que crear la forma programáticamente como se muestra a continuación (código en 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) } }

y aquí es cómo uso la forma como fondo de botón

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 } } }


Parece que el radio máximo permitido en la forma es la mitad de la altura total en la siguiente figura, por lo que puede usarla para tener una forma con altura flexible que mantenga la proporción deseada:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ffffff" /> <size android:height="@dimen/height" /> <corners android:radius="@dimen/height" /> </shape>


Puede aumentar el tamaño del radio a 200dp y establecer el dibujo en el fondo de la vista de texto

<solid android:color="#E6121A" /> <corners android:bottomLeftRadius="12dp" android:bottomRightRadius="12dp" android:topLeftRadius="12dp" android:topRightRadius="12dp" />