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 b
isetAlpha(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, aCENTER
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 FillFILL
, tekst StrokeSTROKE
lub 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 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łtFILL
, kształt obrysuSTROKE
lub obaFILL_AND_STROKE
-
setColor(int color)
Ustaw kolor rysowania farby. Możesz także użyćsetARGB(int a, int r, int g, int b
isetAlpha(int alpha)
-
setStrokeCap(Paint.Cap cap)
Ustaw czapki linii,ROUND
,SQUARE
lubBUTT
(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.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ć