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 de setColor(int color) , inclusief de tekstkleur. U kunt ook setARGB(int a, int r, int g, int b en setAlpha(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 en CENTER 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 vullen FILL , FILL_AND_STROKE STROKE of beide FILL_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 de paint.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 vorm FILL , FILL_AND_STROKE STROKE of beide FILL_AND_STROKE
  • setColor(int color) Stel de setColor(int color) . U kunt ook setARGB(int a, int r, int g, int b en setAlpha(int alpha)
  • setStrokeCap(Paint.Cap cap) instellen, ROUND , SQUARE of BUTT (geen) Zie dit .
  • setStrokeJoin(Paint.Join join) Stel lijn-joins in, ofwel MITER (puntig), ROUND of BEVEL . Zie dit .
  • setStrokeMiter(float miter) Stel de setStrokeMiter(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 tekening Paint.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 van Paint.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 Schakelt Paint.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



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow