Android
Dipingere
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 usaresetARGB(int a, int r, int g, int besetAlpha(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.LEFTlo disegnerà a destra dell'origine,RIGHTlo disegnerà a sinistra, eCENTERtrarrà 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 testoFILL, il testo trattoSTROKEo entrambiFILL_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 boundsMemorizza 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 riempitaFILL, forma StrokeSTROKEo entrambiFILL_AND_STROKE -
setColor(int color)Imposta il colore del disegno della pittura. Puoi anche usaresetARGB(int a, int r, int g, int besetAlpha(int alpha) -
setStrokeCap(Paint.Cap cap)Imposta i limiti di riga,ROUND,SQUAREoBUTT(nessuno) Vedi questo . -
setStrokeJoin(Paint.Join join)Imposta i join di linea,MITER(a punta),ROUNDoBEVEL. 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.0disegnerà 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_FLAGAbilita l'antialiasing,Paint.ANTI_ALIAS_FLAGil disegno. -
Paint.DITHER_FLAGAbilita il dithering. Se la precisione del colore è superiore a quella del dispositivo, ciò avverrà . -
Paint.EMBEDDED_BITMAP_TEXT_FLAGAbilita l'uso di caratteri bitmap. -
Paint.FAKE_BOLD_TEXT_FLAGdisegnerà 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_FLAGsul campionamento di bitmap quando viene trasformato. -
Paint.HINTING_OFF,Paint.HINTING_ONAttivaPaint.HINTING_ONdisattiva il suggerimento sui font, guarda questo -
Paint.LINEAR_TEXT_FLAGDisabilita il ridimensionamento dei caratteri, mentre le operazioni di disegno vengono ridimensionate -
Paint.SUBPIXEL_TEXT_FLAGtesto verrà calcolato utilizzando la precisione subpixel. -
Paint.STRIKE_THRU_TEXT_FLAGtesto disegnato verrà colpito -
Paint.UNDERLINE_TEXT_FLAGtesto 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à