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 b
ysetAlpha(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.LEFT
lo dibujará a la derecha del origen,RIGHT
lo dibujará a la izquierda yCENTER
lo 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 bounds
Almacena 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 b
ysetAlpha(int alpha)
-
setStrokeCap(Paint.Cap cap)
Establezca los límites de línea, ya seaROUND
,SQUARE
oBUTT
(ninguno) Vea esto . -
setStrokeJoin(Paint.Join join)
Establece uniones de línea, ya seaMITER
(puntiaguda),ROUND
oBEVEL
. 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.0
dibujará 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_FLAG
Habilitar antialiasing, suaviza el dibujo. -
Paint.DITHER_FLAG
Habilitar el dithering. Si la precisión del color es mayor que la del dispositivo, esto sucederá . -
Paint.EMBEDDED_BITMAP_TEXT_FLAG
Habilita el uso de fuentes de mapa de bits. -
Paint.FAKE_BOLD_TEXT_FLAG
dibujará 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_FLAG
Afecta el muestreo de mapas de bits cuando se transforma. -
Paint.HINTING_OFF
,Paint.HINTING_ON
Alterna sugerencias de fuentes, vea esto -
Paint.LINEAR_TEXT_FLAG
Deshabilita la escala de fuente, las operaciones de dibujo se escalan en su lugar -
Paint.SUBPIXEL_TEXT_FLAG
texto se computará utilizando la precisión de subpíxel. -
Paint.STRIKE_THRU_TEXT_FLAG
texto dibujado será tachado -
Paint.UNDERLINE_TEXT_FLAG
texto 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á