Suche…


Einführung

Eine Farbe ist eines der vier zum Zeichnen erforderlichen Objekte, zusammen mit einem Canvas (für Zeichnungsaufrufe), einer Bitmap (enthält die Pixel) und einem Zeichnungsgrundelement (Rect, Path, Bitmap ...)

Einen Anstrich erstellen

Sie können einen neuen Anstrich mit einem dieser drei Konstruktoren erstellen:

  • new Paint() Mit Standardeinstellungen erstellen
  • new Paint(int flags) Mit Flags erstellen
  • new Paint(Paint from) Kopiert die Einstellungen von einer anderen Farbe

Im Allgemeinen wird empfohlen, niemals ein Paint-Objekt oder ein anderes Objekt in onDraw () zu erstellen, da dies zu Leistungsproblemen führen kann. (Android Studio wird Sie wahrscheinlich warnen.) Machen Sie es stattdessen global und initialisieren Sie es in Ihrem Klassenkonstruktor wie folgt:

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

Einrichten von Paint für Text

Textzeichnungseinstellungen

  • setTypeface(Typeface typeface) die Schriftart fest. Siehe Schriftbild
  • setTextSize(int size) die Schriftgröße in Pixel fest.
  • setColor(int color) die Farbe der Zeichenfarbe einschließlich der setColor(int color) . Sie können auch setARGB(int a, int r, int g, int b und setAlpha(int alpha)
  • setLetterSpacing(float size) den Abstand zwischen den Zeichen in ems fest. Der Standardwert ist 0, ein negativer Wert wird den Text enger machen, während ein positiver den Text erweitert.
  • setTextAlign(Paint.Align align) Textausrichtung relativ zum Ursprung fest. Paint.Align.LEFT zeichnet es rechts vom Ursprung, RIGHT zeichnet es nach links und CENTER zeichnet es zentriert auf den Ursprung (horizontal).
  • setTextSkewX(float skewX) Dies kann als gefälschte Kursivschrift betrachtet werden. SkewX steht für den horizontalen Versatz des unteren Texts. (Verwenden Sie -0,25 für Kursivschrift)
  • setStyle(Paint.Style style) Füllen Sie den Text FILL , den Stroke-Text STROKE oder beide FILL_AND_STROKE

Beachten Sie, dass Sie TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) zum Konvertieren von SP oder DP in Pixel verwenden können.

Text messen

  • float width = paint.measureText(String text) die Breite des Textes
  • float height = paint.ascent() Messen Sie die Höhe des Texts
  • paint.getTextBounds(String text, int start, int end, Rect bounds Speichert die paint.getTextBounds(String text, int start, int end, Rect bounds . Sie haben das Rect zugewiesen, es darf nicht null sein:
 String text = "Hello world!";
 Rect bounds = new Rect();
 paint.getTextBounds(text, 0, text.length(), bounds);

Es gibt andere Messmethoden, diese drei sollten jedoch für die meisten Zwecke geeignet sein.

Einrichten von Paint zum Zeichnen von Formen

  • setStyle(Paint.Style style) Gefüllte Form FILL , STROKE oder beide FILL_AND_STROKE
  • setColor(int color) die Farbe der Zeichenfarbe fest. Sie können auch setARGB(int a, int r, int g, int b und setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) ROUND , SQUARE oder BUTT (keine). Siehe dies .
  • setStrokeJoin(Paint.Join join) Setzt Linienverbindungen entweder MITER (pointy), ROUND oder BEVEL . Sehen Sie das hier .
  • setStrokeMiter(float miter) Join-Grenze fest. Dies kann verhindern, dass die Gehrungsverknüpfung unbegrenzt fortfährt und nach x Pixel in eine Abschrägungsverknüpfung umgewandelt wird. Sehen Sie das hier .
  • setStrokeWidth(float width) Strichbreite ein. 0 wird unabhängig von der Canvas-Matrix im Hairline-Modus gezeichnet. (immer 1 Pixel)

Flags setzen

Sie können die folgenden Flags im Konstruktor oder mit setFlags(int flags)

  • Paint.ANTI_ALIAS_FLAG Antialiasing Paint.ANTI_ALIAS_FLAG , glättet die Zeichnung.
  • Paint.DITHER_FLAG Dithering Paint.DITHER_FLAG . Wenn die Farbgenauigkeit höher ist als die des Geräts, wird dies passieren .
  • Paint.EMBEDDED_BITMAP_TEXT_FLAG Ermöglicht die Verwendung von Bitmap-Schriftarten.
  • Paint.FAKE_BOLD_TEXT_FLAG zeichnet Text mit einem gefälschten Paint.FAKE_BOLD_TEXT_FLAG kann anstelle einer Fettschrift verwendet werden. Einige Schriftarten sind fett dargestellt, fake fett nicht
  • Paint.FILTER_BITMAP_FLAG die Umwandlung von Bitmaps.
  • Paint.HINTING_OFF , Paint.HINTING_ON Schaltet die Schriftarthinweise um, siehe dies
  • Paint.LINEAR_TEXT_FLAG Deaktiviert die Schriftskalierung. Zeichnen wird stattdessen skaliert
  • Paint.SUBPIXEL_TEXT_FLAG Text wird mit Subpixel-Genauigkeit berechnet.
  • Paint.STRIKE_THRU_TEXT_FLAG gezeichnete Text wird markiert
  • Paint.UNDERLINE_TEXT_FLAG gezeichnete Text wird unterstrichen

Sie können eine Flagge hinzufügen und Flaggen wie folgt entfernen:

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

Wenn Sie versuchen, ein Flag zu entfernen, das nicht vorhanden ist, oder das Hinzufügen eines Flag, das bereits vorhanden ist, ändert dies nichts. Beachten Sie auch, dass die meisten Flags auch mit set<Flag>(boolean enabled) , beispielsweise setAntialias(true) .

Sie können paint.reset() , um die Farbe auf die Standardeinstellungen zurückzusetzen. Das einzige Standardflag ist EMBEDDED_BITMAP_TEXT_FLAG . Es wird auch eingestellt, wenn Sie einen new Paint(0)



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow