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 b
esetAlpha(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, eCENTER
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 testoFILL
, il testo trattoSTROKE
o 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 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 riempitaFILL
, forma StrokeSTROKE
o entrambiFILL_AND_STROKE
-
setColor(int color)
Imposta il colore del disegno della pittura. Puoi anche usaresetARGB(int a, int r, int g, int b
esetAlpha(int alpha)
-
setStrokeCap(Paint.Cap cap)
Imposta i limiti di riga,ROUND
,SQUARE
oBUTT
(nessuno) Vedi questo . -
setStrokeJoin(Paint.Join join)
Imposta i join di linea,MITER
(a punta),ROUND
oBEVEL
. 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
AttivaPaint.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à