Cómo crear mediante programación un borde arrinconado redondeado con ShapeDrawable en android?
Necesito crear un borde con las esquinas redondeadas programatically extendiendo ShapeDrawable. Necesito tener un borde negro con las esquinas redondeadas con los pixeles en el exterior que es blanco y los pixeles internos que son transparentes. El código que tengo en este momento tiene múltiples problemas, de los cuales son que no crea una esquina lisa que es el mismo grosor que el borde y que los píxeles externos del borde son transparentes y no blancos.
Aquí está una imagen de las esquinas que estoy recibiendo actualmente
- ¿Por qué estoy recibiendo la excepción HttpHostConnectException?
- Cómo agregar un contacto a un grupo android
- Java.IO.ISerializable Xamarin
- Transferencia de Bluetooth La aplicación se detiene después de usar InputStream.read () sin error
- Desenfoque la pantalla en LibGDX
Aquí está el código en el que paso Color.TRANSPARENT para 'fill' en el constructor:
public class CustomShape extends ShapeDrawable { private final Paint fillpaint, strokepaint; public CustomShape(int fill, int strokeWidth,int radius) { super(new RoundRectShape(new float[] { radius, radius, radius, radius, radius, radius, radius, radius }, null, null)); fillpaint = new Paint(this.getPaint()); fillpaint.setColor(fill); strokepaint = new Paint(fillpaint); strokepaint.setStyle(Paint.Style.STROKE); strokepaint.setStrokeWidth(strokeWidth); strokepaint.setColor(Color.BLACK); } @Override protected void onDraw(Shape shape, Canvas canvas, Paint paint) { shape.draw(canvas, fillpaint); shape.draw(canvas, strokepaint); }
}
- Android Java; ¿Cómo puedo analizar un archivo JSON local de carpeta de activos en un ListView
- Avd para Samsung Galaxy S4 no funciona
- Fragmento de fragmento de Android como fragmento de diálogo o fragmento habitual
- ¿Cuál es la forma más adecuada de almacenar la configuración de usuario en la aplicación de Android?
- Java.lang.String no se puede convertir a JSONObject desde Android
- Android - Determinar el límite de texto SMS
- Compartir texto en facebook con la intención de compartir de Android
- Cómo añadir títulos de Axis a mpandroidchart
Si necesita esquinas redondeadas (y de su ejemplo parece que lo hace) simplemente puede utilizar GradentDrawable con un color sólido
GradientDrawable gd = new GradientDrawable(); gd.setColor(Color.RED); gd.setCornerRadius(10); gd.setStroke(2, Color.WHITE); view.setBackground(gd);
La documentación de GradientDrawable se puede encontrar aquí .
Editar: Para cada esquina por separado
Puede especificar el radio de cada esquina por separado usando el setCornerRadii (float[] radii)
. "Para cada esquina, la matriz contiene 2 valores, [X_radius, Y_radius] .Las esquinas se ordenan arriba a la izquierda, arriba a la derecha, abajo a la derecha, abajo a la izquierda.Esta propiedad sólo se honra cuando la forma es del tipo RECTÁNGULO.
Se recomienda invocar mutate()
antes de cambiar esta propiedad.
Puede implementar un dibujable personalizado. A continuación se muestra el ejemplo del xml.
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="#ff000000" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" /> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape>
Guarde este xml en la carpeta dibujable de su proyecto. Ahora úsalo como un dibujable normal para cualquier widget. Por ejemplo: android: background = "R.drawable.round_shape"
Este ejemplo se hace referencia en el siguiente enlace .
GradientDrawable drawable = (GradientDrawable)image.getBackground(); drawable.setGradientRadius(radiuspx);
Además de especificar la dimensión de la esquina redonda puede utilizar GradientDrawable y el método setCornerRadii ()
GradientDrawable d = new GradientDrawable(); d.setCornerRadii({5.0f,5.0f,5.0f,5.0f}); textViewExample.setBackgroundResource(d);
- Mapeo entre los permisos de Android (que definimos en el archivo manisfest) a las llamadas / métodos de API correspondientes
- Cómo incrustar un servidor Http (como i-Jetty, Paw, etc) en la aplicación Android