Android
Måla
Sök…
Introduktion
En färg är ett av de fyra föremål som behövs för att rita, tillsammans med en duk (håller ritningssamtal), en bitmapp (håller pixlarna) och en ritningsprimitiv (Rect, Path, Bitmap ...)
Skapa en färg
Du kan skapa en ny färg med en av dessa tre konstruktörer:
-
new Paint()Skapa med standardinställningar -
new Paint(int flags)Skapa med flaggor -
new Paint(Paint from)Kopiera inställningar från en annan färg
Det föreslås vanligtvis att du aldrig skapar ett färgobjekt eller något annat objekt i onDraw () eftersom det kan leda till prestandaproblem. (Android Studio kommer förmodligen att varna dig) Gör det istället globalt och initiera det i din klasskonstruktör så:
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);
// ...
}
}
Ställa in färg för text
Inställningar för textritning
-
setTypeface(Typeface typeface)Ställ in teckensnittytan. Se typsnitt -
setTextSize(int size)Ställ in teckenstorlek, i pixlar. -
setColor(int color)Ställ in färgfärgen, inklusive textfärgen. Du kan också användasetARGB(int a, int r, int g, int bochsetAlpha(int alpha) -
setLetterSpacing(float size)Ställ in avståndet mellan tecken, i ems. Standardvärdet är 0, ett negativt värde kommer att dra åt texten, medan ett positivt värde kommer att expandera det. -
setTextAlign(Paint.Align align)Ställ in textjustering relativt dess ursprung.Paint.Align.LEFTdrar det till höger om ursprunget,RIGHTkommer att rita det till vänster ochCENTERkommer att rita det centrerat på ursprunget (horisontellt) -
setTextSkewX(float skewX)Detta kan betraktas som falsk kursiv. SkewX representerar den horisontella offseten för textbotten. (använd -0,25 för kursiv) -
setStyle(Paint.Style style)Fyll textFILL, stroke textSTROKEeller bådaFILL_AND_STROKE
Observera att du kan använda TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics()) att konvertera från SP eller DP till pixlar.
Mätning av text
-
float width = paint.measureText(String text)Mät textbredden -
float height = paint.ascent()Mät textens höjd -
paint.getTextBounds(String text, int start, int end, Rect bounds. Du har allokerat Rect, det kan inte vara noll:
String text = "Hello world!";
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
Det finns andra metoder för mätning, men dessa tre bör passa de flesta syften.
Ställa in färg för att rita former
-
setStyle(Paint.Style style)Fylld formFILL, Stroke-formSTROKE, eller bådaFILL_AND_STROKE -
setColor(int color)Ställ in färgfärgen. Du kan också användasetARGB(int a, int r, int g, int bochsetAlpha(int alpha) -
setStrokeCap(Paint.Cap cap)Ställ in linjekåpor, antingenROUND,SQUAREellerBUTT(none) Se detta . -
setStrokeJoin(Paint.Join join)Ställ in linjefogningar, antingenMITER(spetsig),ROUNDellerBEVEL. Se detta . -
setStrokeMiter(float miter)Ställ in gränsen försetStrokeMiter(float miter). Detta kan förhindra att miter-kopplingen pågår på obestämd tid, och förvandlar den till en avfasningskoppling efter x-pixlar. Se detta . -
setStrokeWidth(float width)Ställ in slagbredd.0kommer att rita i hårlinjeläge, oberoende av dukmatrisen. (alltid 1 pixel)
Ställa in flaggor
Du kan ställa in följande flaggor i konstruktören, eller med setFlags(int flags)
-
Paint.ANTI_ALIAS_FLAGAktivera antialiasing, jämnar ritningen. -
Paint.DITHER_FLAGAktivera dithering. Om färgprecisionen är högre än enhetens, kommer detta att hända . -
Paint.EMBEDDED_BITMAP_TEXT_FLAGAktiverar användning av bitmappssteckensnitt. -
Paint.FAKE_BOLD_TEXT_FLAGritar text med en falsk fet fet effekt, kan användas istället för att använda ett djärvt typsnitt. Vissa teckensnitt har utformat fetstil, falska fetstil kommer inte -
Paint.FILTER_BITMAP_FLAGPåverkar sampling av bitmappar vid omvandling. -
Paint.HINTING_OFF,Paint.HINTING_ONtypsnitt tips, se detta -
Paint.LINEAR_TEXT_FLAGInaktiverarPaint.LINEAR_TEXT_FLAGritningsfunktioner skalas istället -
Paint.SUBPIXEL_TEXT_FLAGText kommer att beräknas med subpixels noggrannhet. -
Paint.STRIKE_THRU_TEXT_FLAGTexten som dras kommer att streckas -
Paint.UNDERLINE_TEXT_FLAGText som dras kommer att betonas
Du kan lägga till en flagga och ta bort flaggor så här:
Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG); // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG); // Remove flag
Att försöka ta bort en flagga som inte finns där eller lägga till en flagga som redan finns där kommer inte att ändra någonting. Observera också att de flesta flaggor också kan ställas in med set<Flag>(boolean enabled) , till exempel setAntialias(true) .
Du kan använda paint.reset() att återställa färgen till dess standardinställningar. Den enda standardflaggan är EMBEDDED_BITMAP_TEXT_FLAG . Det kommer att ställas in även om du använder new Paint(0)