Android
Farba
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 bisetAlpha(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.LEFTnarysuje go na prawo od początku,RIGHTnarysuje go na lewo, aCENTERnarysuje 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 FillFILL, tekst StrokeSTROKElub obaFILL_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 boundsPrzechowuje 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łtFILL, kształt obrysuSTROKElub obaFILL_AND_STROKE -
setColor(int color)Ustaw kolor rysowania farby. Możesz także użyćsetARGB(int a, int r, int g, int bisetAlpha(int alpha) -
setStrokeCap(Paint.Cap cap)Ustaw czapki linii,ROUND,SQUARElubBUTT(brak) Zobacz to . -
setStrokeJoin(Paint.Join join)Ustaw łączenie linii alboMITER(spiczasty),ROUND, lubBEVEL. Zobacz to . -
setStrokeMiter(float miter)Ustaw limit łączeniasetStrokeMiter(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.0narysuje 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_FLAGWłącz antyaliasing, wygładza rysunek. -
Paint.DITHER_FLAGWłącz dithering. Jeśli precyzja kolorów jest wyższa niż w urządzeniu, tak się stanie . -
Paint.EMBEDDED_BITMAP_TEXT_FLAGUmożliwia stosowanie czcionek bitmapowych. -
Paint.FAKE_BOLD_TEXT_FLAGnarysuje 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_FLAGWpływa na próbkowanie bitmap po transformacji. -
Paint.HINTING_OFF,Paint.HINTING_ONWłącza podpowiedzi czcionek, zobacz to -
Paint.LINEAR_TEXT_FLAGWyłącza skalowanie czcionek, zamiast tego skalowane są operacje rysowania -
Paint.SUBPIXEL_TEXT_FLAGTekst będzie obliczany z dokładnością do subpikseli. -
Paint.STRIKE_THRU_TEXT_FLAGtekst zostanie przekreślony -
Paint.UNDERLINE_TEXT_FLAGtekst 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ć