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 bensetAlpha(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.LEFTtekent het rechts van de oorsprong,RIGHTtekent het naar links enCENTERtekent 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_STROKESTROKEof 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 boundsSlaat 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_STROKESTROKEof beideFILL_AND_STROKE -
setColor(int color)Stel desetColor(int color). U kunt ooksetARGB(int a, int r, int g, int bensetAlpha(int alpha) -
setStrokeCap(Paint.Cap cap)instellen,ROUND,SQUAREofBUTT(geen) Zie dit . -
setStrokeJoin(Paint.Join join)Stel lijn-joins in, ofwelMITER(puntig),ROUNDofBEVEL. 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.0tekent 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_FLAGinschakelen, maakt de tekeningPaint.ANTI_ALIAS_FLAG. -
Paint.DITHER_FLAGinschakelen. Als de kleurnauwkeurigheid hoger is dan die van het apparaat, gebeurt dit . -
Paint.EMBEDDED_BITMAP_TEXT_FLAGMaakt het gebruik vanPaint.EMBEDDED_BITMAP_TEXT_FLAG. -
Paint.FAKE_BOLD_TEXT_FLAGtekent 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_FLAGinvloed op de bemonstering van bitmaps bij transformatie. -
Paint.HINTING_OFF,Paint.HINTING_ONSchakelt lettertypehints in, zie dit -
Paint.LINEAR_TEXT_FLAGSchakeltPaint.LINEAR_TEXT_FLAGworden in plaats daarvan geschaald -
Paint.SUBPIXEL_TEXT_FLAGTekst wordt berekend met behulp van subpixelnauwkeurigheid. -
Paint.STRIKE_THRU_TEXT_FLAGtekst wordt doorgehaald -
Paint.UNDERLINE_TEXT_FLAGtekst 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