Ricerca…


introduzione

Una vernice è uno dei quattro oggetti necessari per disegnare, insieme a una tela (trattiene le chiamate di disegno), una bitmap (contiene i pixel) e una primitiva di disegno (Rect, Path, Bitmap ...)

Creare un dipinto

Puoi creare una nuova vernice con uno di questi 3 costruttori:

  • new Paint() Crea con le impostazioni predefinite
  • new Paint(int flags) Crea con flag
  • new Paint(Paint from) Copia le impostazioni da un'altra vernice

In genere si consiglia di non creare mai un oggetto paint o qualsiasi altro oggetto in onDraw () poiché può causare problemi di prestazioni. (Android Studio probabilmente ti avviserà) Invece, rendilo globale e inizializzalo nel tuo costruttore di classe in questo modo:

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);
        // ...
    }
}

Impostazione di Paint per il testo

Impostazioni di disegno del testo

  • setTypeface(Typeface typeface) Imposta la faccia del font. Vedi il carattere
  • setTextSize(int size) Imposta la dimensione del carattere, in pixel.
  • setColor(int color) Imposta il colore del disegno della pittura, incluso il colore del testo. Puoi anche usare setARGB(int a, int r, int g, int b e setAlpha(int alpha)
  • setLetterSpacing(float size) Imposta la spaziatura tra i caratteri, in ems. Il valore predefinito è 0, un valore negativo stringerà il testo, mentre uno positivo lo espanderà.
  • setTextAlign(Paint.Align align) Imposta l'allineamento del testo rispetto all'origine. Paint.Align.LEFT lo disegnerà a destra dell'origine, RIGHT lo disegnerà a sinistra, e CENTER trarrà centrato sull'origine (orizzontalmente)
  • setTextSkewX(float skewX) Questo potrebbe essere considerato come falso in corsivo. SkewX rappresenta l'offset orizzontale del testo in basso. (usa -0.25 per corsivo)
  • setStyle(Paint.Style style) Riempi il testo FILL , il testo tratto STROKE o entrambi FILL_AND_STROKE

Si noti che è possibile utilizzare TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) per convertire da SP o DP a pixel.

Testo di misurazione

  • float width = paint.measureText(String text) Misura la larghezza del testo
  • float height = paint.ascent() Misura l'altezza del testo
  • paint.getTextBounds(String text, int start, int end, Rect bounds Memorizza le dimensioni del testo. Hai assegnato il Rect, non può essere nullo:
 String text = "Hello world!";
 Rect bounds = new Rect();
 paint.getTextBounds(text, 0, text.length(), bounds);

Esistono altri metodi per misurare, tuttavia questi tre dovrebbero adattarsi alla maggior parte degli scopi.

Impostazione di Paint per disegnare forme

  • setStyle(Paint.Style style) Forma riempita FILL , forma Stroke STROKE o entrambi FILL_AND_STROKE
  • setColor(int color) Imposta il colore del disegno della pittura. Puoi anche usare setARGB(int a, int r, int g, int b e setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) Imposta i limiti di riga, ROUND , SQUARE o BUTT (nessuno) Vedi questo .
  • setStrokeJoin(Paint.Join join) Imposta i join di linea, MITER (a punta), ROUND o BEVEL . Vedi questo .
  • setStrokeMiter(float miter) Imposta il limite del join mitra. Questo può impedire al mitre join di andare avanti indefinitamente, trasformandolo in un join smussato dopo x pixel. Vedi questo .
  • setStrokeWidth(float width) Imposta la larghezza del tratto. 0 disegnerà in modalità attaccatura dei capelli, indipendente dalla matrice di tela. (sempre 1 pixel)

Impostazione delle bandiere

È possibile impostare i seguenti flag nel costruttore o con setFlags(int flags)

  • Paint.ANTI_ALIAS_FLAG Abilita l'antialiasing, Paint.ANTI_ALIAS_FLAG il disegno.
  • Paint.DITHER_FLAG Abilita il dithering. Se la precisione del colore è superiore a quella del dispositivo, ciò avverrà .
  • Paint.EMBEDDED_BITMAP_TEXT_FLAG Abilita l'uso di caratteri bitmap.
  • Paint.FAKE_BOLD_TEXT_FLAG disegnerà il testo con un effetto audace falso, può essere usato invece di usare un carattere grassetto. Alcuni tipi di carattere hanno uno stile audace, non lo sono in grassetto falso
  • Paint.FILTER_BITMAP_FLAG sul campionamento di bitmap quando viene trasformato.
  • Paint.HINTING_OFF , Paint.HINTING_ON Attiva Paint.HINTING_ON disattiva il suggerimento sui font, guarda questo
  • Paint.LINEAR_TEXT_FLAG Disabilita il ridimensionamento dei caratteri, mentre le operazioni di disegno vengono ridimensionate
  • Paint.SUBPIXEL_TEXT_FLAG testo verrà calcolato utilizzando la precisione subpixel.
  • Paint.STRIKE_THRU_TEXT_FLAG testo disegnato verrà colpito
  • Paint.UNDERLINE_TEXT_FLAG testo disegnato sarà sottolineato

Puoi aggiungere un flag e rimuovere flag come questo:

Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG);   // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG);  // Remove flag

Cercando di rimuovere una bandiera che non c'è o aggiungendo una bandiera che è già lì non cambierà nulla. Si noti inoltre che la maggior parte dei flag può anche essere impostata usando set<Flag>(boolean enabled) , ad esempio setAntialias(true) .

È possibile utilizzare paint.reset() per ripristinare il paint.reset() impostazioni predefinite. L'unico flag predefinito è EMBEDDED_BITMAP_TEXT_FLAG . Verrà impostato anche se si utilizza il new Paint(0) , lo si avrà



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow