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 utiliser setARGB(int a, int r, int g, int b et setAlpha(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.LEFT le dessinera à droite de l'origine, RIGHT le dessinera à gauche et CENTER le 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 texte FILL , le texte Stroke STROKE , ou les deux FILL_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 bounds Stocke 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 remplie FILL , la forme de maladies STROKE , ou les deux FILL_AND_STROKE
  • setColor(int color) Définit la couleur du dessin de peinture. Vous pouvez également utiliser setARGB(int a, int r, int g, int b et setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) fixer des plafonds de ligne, soit ROUND , SQUARE , ou BUTT (none) Voir ce .
  • setStrokeJoin(Paint.Join join) Définit les jointures de ligne, soit MITER (pointu), ROUND ou BEVEL . 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. 0 va 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_FLAG Active l'anticrénelage, lisse le dessin.
  • Paint.DITHER_FLAG Active le dithering. Si la précision des couleurs est supérieure à celle du périphérique, cela se produira .
  • Paint.EMBEDDED_BITMAP_TEXT_FLAG Permet l'utilisation de polices bitmap.
  • Paint.FAKE_BOLD_TEXT_FLAG va 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_FLAG Affecte l'échantillonnage des bitmaps lors de la transformation.
  • Paint.HINTING_OFF , Paint.HINTING_ON Active / Paint.HINTING_ON police, voir ceci
  • Paint.LINEAR_TEXT_FLAG Désactive la mise à l'échelle des polices, les opérations de dessin sont mises à l'échelle à la place
  • Paint.SUBPIXEL_TEXT_FLAG texte sera calculé en utilisant la précision du sous-pixel.
  • Paint.STRIKE_THRU_TEXT_FLAG texte dessiné sera rayé
  • Paint.UNDERLINE_TEXT_FLAG texte 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



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow