Android
Pintar
Buscar..
Introducción
Una pintura es uno de los cuatro objetos necesarios para dibujar, junto con un Lienzo (contiene llamadas de dibujo), un Mapa de bits (contiene los píxeles) y una primitiva de dibujo (Rect, Ruta, Mapa de bits ...)
Creando una pintura
Puedes crear una nueva pintura con uno de estos 3 constructores:
-
new Paint()Crear con la configuración predeterminada -
new Paint(int flags)Crear con banderas -
new Paint(Paint from)Copiar configuraciones de otra pintura
En general, se sugiere nunca crear un objeto de pintura, o cualquier otro objeto en onDraw (), ya que puede llevar a problemas de rendimiento. (Android Studio probablemente te lo advertirá) En su lugar, hazlo global e inicialízalo en el constructor de tu clase de la siguiente manera:
public class CustomView extends View {
private Paint paint;
public CustomView(Context context) {
super(context);
paint = new Paint();
//...
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(0xFF000000);
// ...
}
}
Configuración de la pintura para el texto
Ajustes de dibujo de texto
-
setTypeface(Typeface typeface)Establece la fuente. Ver tipografía -
setTextSize(int size)Establece el tamaño de la fuente, en píxeles. -
setColor(int color)Establece el color del dibujo de pintura, incluido el color del texto. También puede usarsetARGB(int a, int r, int g, int bysetAlpha(int alpha) -
setLetterSpacing(float size)Establece el espaciado entre los caracteres, en ems. El valor predeterminado es 0, un valor negativo ajustará el texto, mientras que uno positivo lo expandirá. -
setTextAlign(Paint.Align align)Establece la alineación del texto en relación con su origen.Paint.Align.LEFTlo dibujará a la derecha del origen,RIGHTlo dibujará a la izquierda yCENTERlo dibujará centrado en el origen (horizontalmente) -
setTextSkewX(float skewX)Esto podría considerarse como una cursiva falsa. SkewX representa el desplazamiento horizontal de la parte inferior del texto. (use -0.25 para cursiva) -
setStyle(Paint.Style style)Llenar el textoFILL, poner textoSTROKE, o ambosFILL_AND_STROKE
Tenga en cuenta que puede usar TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) para convertir de SP o DP a píxeles.
Texto de medición
-
float width = paint.measureText(String text)Mide el ancho del texto -
float height = paint.ascent()Mide la altura del texto -
paint.getTextBounds(String text, int start, int end, Rect boundsAlmacena las dimensiones del texto. Usted ha asignado el Rect, no puede ser nulo:
String text = "Hello world!";
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
Hay otros métodos para medir, sin embargo, estos tres deben ajustarse a la mayoría de los propósitos.
Configuración de pintura para dibujar formas.
-
setStyle(Paint.Style style)forma rellenaFILL, forma StrokeSTROKE, o ambosFILL_AND_STROKE -
setColor(int color)Establece el color de dibujo de la pintura. También puede usarsetARGB(int a, int r, int g, int bysetAlpha(int alpha) -
setStrokeCap(Paint.Cap cap)Establezca los límites de línea, ya seaROUND,SQUAREoBUTT(ninguno) Vea esto . -
setStrokeJoin(Paint.Join join)Establece uniones de línea, ya seaMITER(puntiaguda),ROUNDoBEVEL. Ver esto -
setStrokeMiter(float miter)Establezca el límite de unión de inglete. Esto puede evitar que la unión en inglete se realice indefinidamente, convirtiéndola en una unión en bisel después de x píxeles. Ver esto -
setStrokeWidth(float width)Establezca el ancho del trazo.0dibujará en modo rayita, independiente de la matriz del lienzo. (siempre 1 píxel)
Poniendo banderas
Puede establecer las siguientes banderas en el constructor, o con setFlags(int flags)
-
Paint.ANTI_ALIAS_FLAGHabilitar antialiasing, suaviza el dibujo. -
Paint.DITHER_FLAGHabilitar el dithering. Si la precisión del color es mayor que la del dispositivo, esto sucederá . -
Paint.EMBEDDED_BITMAP_TEXT_FLAGHabilita el uso de fuentes de mapa de bits. -
Paint.FAKE_BOLD_TEXT_FLAGdibujará texto con un efecto en negrita falso, se puede usar en lugar de usar una tipografía en negrita. Algunas fuentes tienen un estilo audaz, falso negrita no -
Paint.FILTER_BITMAP_FLAGAfecta el muestreo de mapas de bits cuando se transforma. -
Paint.HINTING_OFF,Paint.HINTING_ONAlterna sugerencias de fuentes, vea esto -
Paint.LINEAR_TEXT_FLAGDeshabilita la escala de fuente, las operaciones de dibujo se escalan en su lugar -
Paint.SUBPIXEL_TEXT_FLAGtexto se computará utilizando la precisión de subpíxel. -
Paint.STRIKE_THRU_TEXT_FLAGtexto dibujado será tachado -
Paint.UNDERLINE_TEXT_FLAGtexto dibujado estará subrayado
Puedes agregar una bandera y eliminar banderas como esta:
Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG); // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG); // Remove flag
Intentar eliminar una bandera que no está allí o agregar una bandera que ya está allí no cambiará nada. También tenga en cuenta que la mayoría de los indicadores también se pueden establecer utilizando set<Flag>(boolean enabled) , por ejemplo setAntialias(true) .
Puede usar paint.reset() para restablecer la pintura a su configuración predeterminada. El único indicador predeterminado es EMBEDDED_BITMAP_TEXT_FLAG . Se establecerá incluso si utiliza new Paint(0) , tendrá