Android
Verf
Zoeken…
Invoering
Een verf is een van de vier objecten die nodig zijn om te tekenen, samen met een canvas (bevat tekenoproepen), een bitmap (bevat de pixels) en een primitieve tekening (rechthoek, pad, bitmap ...)
Een verf maken
Je kunt een nieuwe verf maken met een van deze 3 constructors:
-
new Paint()
Maken met standaardinstellingen -
new Paint(int flags)
Maken met vlaggen -
new Paint(Paint from)
Instellingen van een andere paint kopiëren
Over het algemeen wordt aanbevolen om nooit een paint-object of een ander object in onDraw () te maken, omdat dit tot prestatieproblemen kan leiden. (Android Studio zal u waarschijnlijk waarschuwen) Maak het in plaats daarvan globaal en initialiseer het als volgt in uw klassenbouwer:
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);
// ...
}
}
Paint instellen voor tekst
Instellingen voor teksttekening
-
setTypeface(Typeface typeface)
Stel het lettertype in. Zie lettertype -
setTextSize(int size)
Stel de lettergrootte in pixels in. -
setColor(int color)
Stel desetColor(int color)
, inclusief de tekstkleur. U kunt ooksetARGB(int a, int r, int g, int b
ensetAlpha(int alpha)
-
setLetterSpacing(float size)
Stel de afstand tussen tekens in, in ems. Standaardwaarde is 0, een negatieve waarde zal de tekst strakker maken, terwijl een positieve de tekst zal uitbreiden. -
setTextAlign(Paint.Align align)
relatief ten opzichte van de oorsprong instellen.Paint.Align.LEFT
tekent het rechts van de oorsprong,RIGHT
tekent het naar links enCENTER
tekent het gecentreerd op de oorsprong (horizontaal) -
setTextSkewX(float skewX)
Dit kan worden beschouwd als nep cursief. SkewX vertegenwoordigt de horizontale offset van de tekst onderaan. (gebruik -0.25 voor cursief) -
setStyle(Paint.Style style)
Tekst vullenFILL
,FILL_AND_STROKE
STROKE
of beideFILL_AND_STROKE
Merk op dat u TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics())
kunt gebruiken om van SP of DP naar pixels te converteren.
Tekst meten
-
float width = paint.measureText(String text)
Meet de breedte van de tekst -
float height = paint.ascent()
Meet de hoogte van de tekst -
paint.getTextBounds(String text, int start, int end, Rect bounds
Slaat depaint.getTextBounds(String text, int start, int end, Rect bounds
. U hebt de Rect toegewezen, deze mag niet null zijn:
String text = "Hello world!";
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
Er zijn andere meetmethoden, maar deze drie zouden voor de meeste doeleinden moeten passen.
Paint instellen voor het tekenen van vormen
-
setStyle(Paint.Style style)
Gevulde vormFILL
,FILL_AND_STROKE
STROKE
of beideFILL_AND_STROKE
-
setColor(int color)
Stel desetColor(int color)
. U kunt ooksetARGB(int a, int r, int g, int b
ensetAlpha(int alpha)
-
setStrokeCap(Paint.Cap cap)
instellen,ROUND
,SQUARE
ofBUTT
(geen) Zie dit . -
setStrokeJoin(Paint.Join join)
Stel lijn-joins in, ofwelMITER
(puntig),ROUND
ofBEVEL
. Zie dit . -
setStrokeMiter(float miter)
Stel desetStrokeMiter(float miter)
. Dit kan voorkomen dat verstekverbindingen eindeloos doorgaan, waardoor het een schuine verbinding wordt na x pixels. Zie dit . -
setStrokeWidth(float width)
instellen.0
tekent in haarlijnmodus, onafhankelijk van de canvasmatrix. (altijd 1 pixel)
Vlaggen instellen
U kunt de volgende vlaggen instellen in de constructor of met setFlags(int flags)
-
Paint.ANTI_ALIAS_FLAG
inschakelen, maakt de tekeningPaint.ANTI_ALIAS_FLAG
. -
Paint.DITHER_FLAG
inschakelen. Als de kleurnauwkeurigheid hoger is dan die van het apparaat, gebeurt dit . -
Paint.EMBEDDED_BITMAP_TEXT_FLAG
Maakt het gebruik vanPaint.EMBEDDED_BITMAP_TEXT_FLAG
. -
Paint.FAKE_BOLD_TEXT_FLAG
tekent tekst met een nep vetgedrukt effect, kan worden gebruikt in plaats van een vetgedrukt lettertype. Sommige lettertypen hebben vetgedrukt, nep vetgedrukt niet -
Paint.FILTER_BITMAP_FLAG
invloed op de bemonstering van bitmaps bij transformatie. -
Paint.HINTING_OFF
,Paint.HINTING_ON
Schakelt lettertypehints in, zie dit -
Paint.LINEAR_TEXT_FLAG
SchakeltPaint.LINEAR_TEXT_FLAG
worden in plaats daarvan geschaald -
Paint.SUBPIXEL_TEXT_FLAG
Tekst wordt berekend met behulp van subpixelnauwkeurigheid. -
Paint.STRIKE_THRU_TEXT_FLAG
tekst wordt doorgehaald -
Paint.UNDERLINE_TEXT_FLAG
tekst wordt onderstreept
U kunt een vlag toevoegen en vlaggen als volgt verwijderen:
Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG); // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG); // Remove flag
Als je een vlag probeert te verwijderen die er niet is, of een vlag toevoegt die er al is, verandert er niets. Merk ook op dat de meeste vlaggen ook kunnen worden ingesteld met set<Flag>(boolean enabled)
, bijvoorbeeld setAntialias(true)
.
U kunt paint.reset()
om de verf terug te zetten naar de standaardinstellingen. De enige standaardvlag is EMBEDDED_BITMAP_TEXT_FLAG
. Het wordt zelfs ingesteld als u new Paint(0)
gebruikt