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ända setARGB(int a, int r, int g, int b och setAlpha(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.LEFT drar det till höger om ursprunget, RIGHT kommer att rita det till vänster och CENTER kommer 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 text FILL , stroke text STROKE eller båda FILL_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 form FILL , Stroke-form STROKE , eller båda FILL_AND_STROKE
  • setColor(int color) Ställ in färgfärgen. Du kan också använda setARGB(int a, int r, int g, int b och setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) Ställ in linjekåpor, antingen ROUND , SQUARE eller BUTT (none) Se detta .
  • setStrokeJoin(Paint.Join join) Ställ in linjefogningar, antingen MITER (spetsig), ROUND eller BEVEL . Se detta .
  • setStrokeMiter(float miter) Ställ in gränsen för setStrokeMiter(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. 0 kommer 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_FLAG Aktivera antialiasing, jämnar ritningen.
  • Paint.DITHER_FLAG Aktivera dithering. Om färgprecisionen är högre än enhetens, kommer detta att hända .
  • Paint.EMBEDDED_BITMAP_TEXT_FLAG Aktiverar användning av bitmappssteckensnitt.
  • Paint.FAKE_BOLD_TEXT_FLAG ritar 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_FLAG Påverkar sampling av bitmappar vid omvandling.
  • Paint.HINTING_OFF , Paint.HINTING_ON typsnitt tips, se detta
  • Paint.LINEAR_TEXT_FLAG Inaktiverar Paint.LINEAR_TEXT_FLAG ritningsfunktioner skalas istället
  • Paint.SUBPIXEL_TEXT_FLAG Text kommer att beräknas med subpixels noggrannhet.
  • Paint.STRIKE_THRU_TEXT_FLAG Texten som dras kommer att streckas
  • Paint.UNDERLINE_TEXT_FLAG Text 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)



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow