Szukaj…


Wprowadzenie

Farba jest jednym z czterech obiektów potrzebnych do narysowania, wraz z płótnem (zawiera wywołania rysunkowe), bitmapą (zawiera piksele) i prymitywem rysowania (prostokąt, ścieżka, bitmapa ...)

Tworzenie farby

Możesz stworzyć nową farbę za pomocą jednego z tych 3 konstruktorów:

  • new Paint() Utwórz z ustawieniami domyślnymi
  • new Paint(int flags) Utwórz za pomocą flag
  • new Paint(Paint from) Skopiuj ustawienia z innej farby

Ogólnie zaleca się, aby nigdy nie tworzyć obiektu malowania ani żadnego innego obiektu w onDraw (), ponieważ może to prowadzić do problemów z wydajnością. (Android Studio prawdopodobnie cię ostrzeże) Zamiast tego, uczyń go globalnym i zainicjuj go w konstruktorze klas w następujący sposób:

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

Konfigurowanie programu Paint do tekstu

Ustawienia rysowania tekstu

  • setTypeface(Typeface typeface) Ustaw powierzchnię czcionki. Zobacz krój pisma
  • setTextSize(int size) Ustaw rozmiar czcionki w pikselach.
  • setColor(int color) Ustaw kolor rysowania farbą, w tym kolor tekstu. Możesz także użyć setARGB(int a, int r, int g, int b i setAlpha(int alpha)
  • setLetterSpacing(float size) Ustaw odstępy między znakami w ems. Wartość domyślna to 0, wartość ujemna zaostrzy tekst, a wartość dodatnia go rozszerzy.
  • setTextAlign(Paint.Align align) Ustaw wyrównanie tekstu względem jego początku. Paint.Align.LEFT narysuje go na prawo od początku, RIGHT narysuje go na lewo, a CENTER narysuje go na środku początku (poziomo)
  • setTextSkewX(float skewX) Można to uznać za fałszywą kursywę. SkewX reprezentuje poziome przesunięcie dołu tekstu. (użyj -0,25 dla kursywy)
  • setStyle(Paint.Style style) tekst Fill FILL , tekst Stroke STROKE lub oba FILL_AND_STROKE

Zauważ, że możesz użyć TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) do konwersji z SP lub DP na piksele.

Pomiar tekstu

  • float width = paint.measureText(String text) Zmierz szerokość tekstu
  • float height = paint.ascent() Zmierz wysokość tekstu
  • paint.getTextBounds(String text, int start, int end, Rect bounds Przechowuje wymiary tekstu. Przydzielono Rect, nie może być pusty:
 String text = "Hello world!";
 Rect bounds = new Rect();
 paint.getTextBounds(text, 0, text.length(), bounds);

Istnieją inne metody pomiaru, jednak te trzy powinny pasować do większości celów.

Konfigurowanie farby do rysowania kształtów

  • setStyle(Paint.Style style) Wypełniony kształt FILL , kształt obrysu STROKE lub oba FILL_AND_STROKE
  • setColor(int color) Ustaw kolor rysowania farby. Możesz także użyć setARGB(int a, int r, int g, int b i setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) Ustaw czapki linii, ROUND , SQUARE lub BUTT (brak) Zobacz to .
  • setStrokeJoin(Paint.Join join) Ustaw łączenie linii albo MITER (spiczasty), ROUND , lub BEVEL . Zobacz to .
  • setStrokeMiter(float miter) Ustaw limit łączenia setStrokeMiter(float miter) . Może to zapobiec nieskończonemu włączaniu połączenia ukośnego, zamieniając go w połączenie fazowane po x pikselach. Zobacz to .
  • setStrokeWidth(float width) Ustaw szerokość obrysu. 0 narysuje w trybie linii włosów, niezależnie od matrycy płótna. (zawsze 1 piksel)

Ustawianie flag

Możesz ustawić następujące flagi w konstruktorze lub za pomocą setFlags(int flags)

  • Paint.ANTI_ALIAS_FLAG Włącz antyaliasing, wygładza rysunek.
  • Paint.DITHER_FLAG Włącz dithering. Jeśli precyzja kolorów jest wyższa niż w urządzeniu, tak się stanie .
  • Paint.EMBEDDED_BITMAP_TEXT_FLAG Umożliwia stosowanie czcionek bitmapowych.
  • Paint.FAKE_BOLD_TEXT_FLAG narysuje tekst z fałszywym pogrubionym efektem, można go użyć zamiast pogrubionego kroju pisma. Niektóre czcionki mają styl pogrubiony, a fałszywy pogrubienie nie
  • Paint.FILTER_BITMAP_FLAG Wpływa na próbkowanie bitmap po transformacji.
  • Paint.HINTING_OFF , Paint.HINTING_ON Włącza podpowiedzi czcionek, zobacz to
  • Paint.LINEAR_TEXT_FLAG Wyłącza skalowanie czcionek, zamiast tego skalowane są operacje rysowania
  • Paint.SUBPIXEL_TEXT_FLAG Tekst będzie obliczany z dokładnością do subpikseli.
  • Paint.STRIKE_THRU_TEXT_FLAG tekst zostanie przekreślony
  • Paint.UNDERLINE_TEXT_FLAG tekst zostanie podkreślony

Możesz dodać flagę i usunąć takie flagi:

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

Próba usunięcia flagi, której nie ma lub dodanie flagi, która już tam jest, niczego nie zmieni. Zauważ też, że większość flag można również ustawić za pomocą set<Flag>(boolean enabled) , na przykład setAntialias(true) .

Możesz użyć paint.reset() aby przywrócić domyślne ustawienia farby. Jedyną domyślną flagą jest EMBEDDED_BITMAP_TEXT_FLAG . Zostanie ustawiony, nawet jeśli użyjesz new Paint(0) , będziesz mieć



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow