Android
Peindre
Recherche…
Introduction
Une peinture est l'un des quatre objets nécessaires pour dessiner, avec un canevas (contient des appels de dessin), un bitmap (contient les pixels) et une primitive de dessin (rect, chemin, bitmap ...)
Créer une peinture
Vous pouvez créer une nouvelle peinture avec l'un de ces 3 constructeurs:
-
new Paint()Créer avec les paramètres par défaut -
new Paint(int flags)Créer avec des drapeaux -
new Paint(Paint from)Copier les paramètres d'une autre peinture
Il est généralement suggéré de ne jamais créer un objet paint, ou tout autre objet dans onDraw (), car cela peut entraîner des problèmes de performances. (Android Studio vous avertira probablement) Au lieu de cela, rendez-le global et initialisez-le dans votre constructeur de classes comme suit:
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);
// ...
}
}
Configuration de Paint pour le texte
Paramètres de dessin de texte
-
setTypeface(Typeface typeface)Définit la police. Voir police de caractères -
setTextSize(int size)Définit la taille de la police, en pixels. -
setColor(int color)Définit la couleur du dessin de peinture, y compris la couleur du texte. Vous pouvez également utilisersetARGB(int a, int r, int g, int betsetAlpha(int alpha) -
setLetterSpacing(float size)Définit l'espacement entre les caractères, dans ems. La valeur par défaut est 0, une valeur négative resserre le texte, tandis qu'une valeur positive la développe. -
setTextAlign(Paint.Align align)Définit l'alignement du texte par rapport à son origine.Paint.Align.LEFTle dessinera à droite de l'origine,RIGHTle dessinera à gauche etCENTERle dessinera centré sur l'origine (horizontalement) -
setTextSkewX(float skewX)Cela pourrait être considéré comme un faux italique. SkewX représente le décalage horizontal du fond du texte. (utilisez -0.25 pour l'italique) -
setStyle(Paint.Style style)Remplissez texteFILL, le texte StrokeSTROKE, ou les deuxFILL_AND_STROKE
Notez que vous pouvez utiliser TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) pour convertir de SP ou DP en pixels.
Texte de mesure
-
float width = paint.measureText(String text)Mesurer la largeur du texte -
float height = paint.ascent()Mesure la hauteur du texte -
paint.getTextBounds(String text, int start, int end, Rect boundsStocke les dimensions du texte. Vous avez alloué le Rect, il ne peut pas être nul:
String text = "Hello world!";
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
Il existe d'autres méthodes de mesure, mais ces trois méthodes devraient convenir à la plupart des objectifs.
Mise en place de la peinture pour dessiner des formes
-
setStyle(Paint.Style style)forme remplieFILL, la forme de maladiesSTROKE, ou les deuxFILL_AND_STROKE -
setColor(int color)Définit la couleur du dessin de peinture. Vous pouvez également utilisersetARGB(int a, int r, int g, int betsetAlpha(int alpha) -
setStrokeCap(Paint.Cap cap)fixer des plafonds de ligne, soitROUND,SQUARE, ouBUTT(none) Voir ce . -
setStrokeJoin(Paint.Join join)Définit les jointures de ligne, soitMITER(pointu),ROUNDouBEVEL. Voir ça -
setStrokeMiter(float miter)Définit la limite de jointure de l'onglet. Cela peut empêcher la jointure d'onglet de se poursuivre indéfiniment, en la transformant en jointure en biseau après x pixels. Voir ça -
setStrokeWidth(float width)Définit la largeur du trait.0va dessiner en mode hairline, indépendamment de la matrice de canevas. (toujours 1 pixel)
Réglage des drapeaux
Vous pouvez définir les indicateurs suivants dans le constructeur ou avec setFlags(int flags)
-
Paint.ANTI_ALIAS_FLAGActive l'anticrénelage, lisse le dessin. -
Paint.DITHER_FLAGActive le dithering. Si la précision des couleurs est supérieure à celle du périphérique, cela se produira . -
Paint.EMBEDDED_BITMAP_TEXT_FLAGPermet l'utilisation de polices bitmap. -
Paint.FAKE_BOLD_TEXT_FLAGva dessiner un texte avec un faux effet, peut être utilisé au lieu d'utiliser une police de caractères en gras. Certaines polices ont un style audacieux, les faux audibles -
Paint.FILTER_BITMAP_FLAGAffecte l'échantillonnage des bitmaps lors de la transformation. -
Paint.HINTING_OFF,Paint.HINTING_ONActive /Paint.HINTING_ONpolice, voir ceci -
Paint.LINEAR_TEXT_FLAGDésactive la mise à l'échelle des polices, les opérations de dessin sont mises à l'échelle à la place -
Paint.SUBPIXEL_TEXT_FLAGtexte sera calculé en utilisant la précision du sous-pixel. -
Paint.STRIKE_THRU_TEXT_FLAGtexte dessiné sera rayé -
Paint.UNDERLINE_TEXT_FLAGtexte dessiné sera souligné
Vous pouvez ajouter un indicateur et supprimer des indicateurs comme ceci:
Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG); // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG); // Remove flag
Essayer de supprimer un drapeau qui n'est pas là ou ajouter un drapeau qui est déjà là ne changera rien. Notez également que la plupart des indicateurs peuvent également être définis avec set<Flag>(boolean enabled) , par exemple setAntialias(true) .
Vous pouvez utiliser paint.reset() pour réinitialiser la peinture à ses paramètres par défaut. Le seul indicateur par défaut est EMBEDDED_BITMAP_TEXT_FLAG . Il sera défini même si vous utilisez une new Paint(0) , vous aurez