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 usar setARGB(int a, int r, int g, int b y setAlpha(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 y CENTER 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 texto FILL , poner texto STROKE , o ambos FILL_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 rellena FILL , forma Stroke STROKE , o ambos FILL_AND_STROKE
  • setColor(int color) Establece el color de dibujo de la pintura. También puede usar setARGB(int a, int r, int g, int b y setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) Establezca los límites de línea, ya sea ROUND , SQUARE o BUTT (ninguno) Vea esto .
  • setStrokeJoin(Paint.Join join) Establece uniones de línea, ya sea MITER (puntiaguda), ROUND o BEVEL . 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á



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow