Extragerea beneficiului maxim din obiectul vopselei

Clasa Paint este o combinație de pensulă și paletă. Vă permite să alegeți modul de afișare a primitivelor grafice pe care le desenați pe obiectul Canvas folosind metodele descrise în secțiunea anterioară. Prin schimbarea obiectului Paint puteți controla culoarea, stilul, fontul și efectele speciale folosite în desen.

Metoda setcolor vă permite să selectați obiectul vopsea de culoare perie, stil (za- dat prin utilizarea metodei setStyle) - sau desenați conturul grafic primitiv (accident vascular cerebral), sau o umplere (de umplere), sau ambele, și alte direct (STROKE_AND_FILL).

În plus față de aceste metode simple, clasa Paint acceptă transparența și poate fi schimbată cu diferite shadere, filtre și efecte, oferă un set bogat de culori complexe și perii.

Android SDK include proiecte care oferă majoritatea caracteristicilor clasei Paint. Ele sunt disponibile în subdirectorul grafic împreună cu alte aplicații care prezintă API-uri diferite:

[director rădăcină sdk] \ samples \ ApiDemos \ src \ com \ android \ samples \ graphics

În următoarele secțiuni, veți învăța cum să folosească unele dintre aceste capacități și le isprobuete în practică (de exemplu, să învețe să za- kruglyat colțuri și de lucru cu gradienți), fără a intra în toate combinațiile posibile.

Utilizarea translucidității. Orice culoare din Android conține o proprietate de transparență (canal alfa).

Puteți să o specificați atunci când creați o variabilă de descriere a culorii folosind metodele argb și parseColor:

// Faceți culoarea roșie și jumătate transparentă. Int opacity = 127;

int intColor = Culoare.argb (opacitate, 255, 0, 0);

int parsedColor = Color.parseColor ("# 7FFF0000");

Alternativ, puteți specifica transparența unui obiect existent

Vopsea utilizând metoda setAlpha:

// Faceți culoarea pe jumătate transparentă. Int opacity = 127; myPaint.setAlpha (opacitate);

Crearea unei culori a cărei opacitate este mai mică de 100% înseamnă că orice primitiv grafic desenat cu ea va deveni parțial transparent: într-o oarecare măsură tot ceea ce este desenat sub ea va fi vizibil.

Puteți utiliza efectul de transparență în orice clasă sau metodă care funcționează cu culoarea, inclusiv Paint, Shader, MaskFilter.

Cunoaștere cu shadere. Extensiile la clasa Shader vă permit să creați obiecte Paint, care vopsește elementele mai complexe decât pur și simplu o culoare solidă.

Cele mai comune shadere sunt folosite pentru a descrie umplutura de gradient. Folosind gradiente, puteți oferi cu ușurință o adâncime și o textură în două dimensiuni. Android acceptă trei shadere de gradient (în plus față de raster și compozit).

Descrieți tehnicile de trasare a cuvintelor - ocupația este lipsită de sens în esența sa, deci este mai bine să priviți la Fig. 15.1 pentru a înțelege cum funcționează fiecare dintre aceste shadere. De la stânga la dreapta este prezentat rezultatul cursurilor LinearGradient, RadialGradient și SweepGradient.

Extragerea beneficiului maxim din obiectul vopselei

În Fig. 15.1 nu se afișează clasele ComposeShader și BitmapShader. Cu ajutorul primului puteți amesteca diferite shadere, al doilea vă permite să creați perii de vopsea pe baza de imagini raster.

Pentru a folosi shaders în timpul desenării, ele trebuie aplicate obiectului Paint folosind metoda setShader:

Vopsea shaderPaint = Paint nou ();

Tot ce desenați folosind această perie va fi vopsit cu shaderul specificat, în loc de culoarea solidă.

Specificați shaderele pentru gradienți. După cum sa discutat în secțiunile anterioare, shaderele pentru gradienți vă permit să pictați contururi utilizând o schemă de culoare interpolată. Puteți specifica un gradient în două moduri.

Prima este o tranziție simplă între două culori, așa cum se arată în Lista 15.19 folosind exemplul LinearGradientShader.

Listing 15.19. Crearea unui gradient liniar

int colorFrom = Color.BLACK;

int colorTo = Color.WHITE;

LinearGradient linearGradientShader = new LinearGradient (x1, y1, x2, y2, colorFrom, colorTo, TileMode.CLAMP);

A doua metodă, prezentată în Lista 15.20, oferă o descriere a secvențelor de culoare mai complexe, distribuite în proporții specificate.

Listing 15.20. Crearea unui gradient radial

int [] gradientColors = int int [3]; gradientColori [0] = CuloareGREEN; gradientColori [1] = Culoare.GLOUȘ; gradientColor [2] = CuloareRED;

float [] gradientPositions = float nou [3];

gradientPoziții [1] = 0,5 f; gradientPoziții [2] = 1.0f;

RadialGradient radialGradientShader = new RadialGradient (centerX, centerY, rază, gradientColors, gradientPositions, TileMode.CLAMP);

Fiecare dintre shaderele gradientului (liniar, radial și dezvăluit) vă permite să specificați o umplere cu gradient utilizând oricare dintre metodele de mai sus.

Utilizați modurile de umplere în shadere. Dimensiunile periilor pentru shaderele de gradient sunt determinate folosind limite rectangulare definite explicit sau prin utilizarea unei combinații a punctului central și a lungimii razei. În shaderele raster, dimensiunea periei este egală cu dimensiunea imaginii.

Dacă zona specificată de peria de shader este mai mică decât aria de umplere, modul TileMode determină modul în care restul zonei este umplut.

• CLAMP. Folosește culorile în jurul marginilor shaderului pentru a umple spațiul suplimentar.

• MIRROR. Afișează imaginea shaderului orizontal și vertical astfel încât fiecare parte următoare să atingă cea anterioară.

• REPEAT. Repetă imaginea shaderului pe orizontală și pe verticală, dar nu o afișează.

Utilizați filtre pentru măști. Clasa MaskFilter vă permite să specificați efectele conturului pentru un obiect Paint. Clasele care moștenesc MaskFilter aplică transformări în canalul alfa al obiectului Paint de-a lungul frontierei sale exterioare.

Android include următoarele filtre pentru măști:

• BlurMaskFilter - stabilește stilul de neclaritate și raza proeminențelor pentru marginile obiectului Paint;

• EmbossMaskFilter - reglează direcția sursei de lumină și nivelul luminii, creând un efect de relief.

Pentru a aplica un filtru unei măști, utilizați metoda setMaskFilter, trecând-o ca parametru în obiectul MaskFilter. Listele 15.21 arată procesul de aplicare a filtrului EmbossMaskFilter la obiectul Vopsea existent.

Listing 15.21. Aplicând filtrul EmbossMaskFilter la un obiect Paint

// Setați direcția sursei de lumină plutitoare [] direcția = float nou []<1, 1, 1>;

// Setați nivelul luminii pentru a lumina plutitoare = 0.4f;

// Selectați gradul de specularitate float specular = 6;

// Specificați ce nivel de neclaritate trebuie aplicat la estomparea măștii float = 3.5f;

EmbossMaskFilter emboss = nou EmbossMaskFilter (direcție, lumină, speculară, estompare);

Proiectul demo FingerPaint, care face parte din SDK, este un exemplu perfect de utilizare a obiectelor MaskFilter. Aceasta demonstrează atât efectele - BlurMaskFilter și EmbossMaskFilter.

Utilizarea filtrelor color. Spre deosebire de filtrele de mască care convertesc canalul alfa al unui obiect Paint, filtrele de culoare consumă fiecare dintre canalele RGB. Toți descendenții clasei ColorFilter ignoră canalul alfa în timpul transformărilor.

Android conține trei filtre color.

• ColorMatrixColorFilter. Acesta permite setarea obiectului Paint ColorMatrix matrice de 4 x 5. Obiectele ColorMatrix, folosite în general este utilizat atunci când programul de procesare a imaginii poate de asemenea ditsya prigo- pentru transformare succesive folosind matrice de multiplicare.

• LightingColorFilter. Înmulțiți canalele RGB ale primei culori înainte de a adăuga al doilea. Rezultatul fiecărei conversii variază de la 0 la 255.

• PorterDuffColorFilter. Acesta oferă unul dintre cele 16 moduri de amestecare ale imaginilor digitale Porter-Duff pentru a aplica culoarea specificată obiectului Paint.

Puteți utiliza filtrele de culoare utilizând metoda setColorFilter:

myPaint.setColorFilter (noul LightingColorFilter (Color.BLUE, Color.RED));

În catalogul cu exemple veți găsi o aplicație numită Co-lorMatrixSample, care demonstrează funcționarea filtrelor și a matricelor color.

Utilizarea efectelor conturului. Până în prezent, au fost luate în considerare efectele care au influențat modul în care modelul a fost umplut. Efecte de contur sunt folosite pentru a controla desenul schiță. Ele sunt extrem de utile pentru desenarea primitivelor grafice ale conturului, dar pot fi aplicate oricarui obiect Paint pentru a afecta modul in care contururile lor sunt desenate.

Folosind astfel de efecte, puteți schimba aspectul colțurilor de forme și conturul lor. Android conține mai multe efecte de contur.

• CornerPathEffect. Permite umplerea colțurilor ascuțite sub forma unui primitiv grafic, înlocuindu-le cu cele rotunde.

• DashPathEffect. În loc să desenați un contur solid, puteți utiliza DashPathEffect pentru a crea o contură formată din linii întrerupte (liniuțe / puncte). Este posibil să specificați orice tip de repetare a segmentelor solide / goale.

• DiscretePathEffect. Are același lucru ca DashPathEffect, dar adaugă un element de întâmplare. Se indică lungimea fiecărui segment și gradul de abatere de la conturul original.

• PathDashPathEffect. Vă permite să definiți o nouă formă (contur) pentru ao folosi ca imprimare a conturului original.

Următoarele clase ajută la combinarea diferitelor efecte de contur în contextul unui singur obiect Paint:

• SumPathEffect - adaugă o secvență de două efecte, fiecare aplicată conturului original, după care rezultatele sunt amestecate;

• ComposePathEffect - utilizează primul efect, apoi adaugă cel de-al doilea efect la rezultat.

Efectele conturului care afectează forma obiectului care trebuie tras schimbă zona ocupată de acesta. Datorită acestui fapt, orice efecte de pictura aplicate acestei figuri sunt atrase în noi limite.

Efectele conturului sunt aplicate obiectului Paint folosind metoda setPathEffect:

În directorul de exemple, puteți găsi un ghid pentru a lucra cu fiecare dintre efectele de mai sus.

Modificarea modului Xfermode. Modificarea modului Xfermode pentru obiectul Paint afectează modul în care culorile noi sunt suprapuse peste cele deja desenate.

În circumstanțe obișnuite, atunci când desenați modelul existent, se va crea un nou strat superior. În cazul în care noul obiect Paint este 100% opac, acesta umbrește complet tot ceea ce se află sub zona de desen; dacă este translucid, atunci numai umbrirea sub culoare.

Subclasele Xfermode vă permit să schimbați acest comportament.

• EvitațiXfermode. Specifică culoarea pe care obiectul Paint nu poate (sau vice-versa - poate doar deasupra acestuia) să deseneze. Se specifică și un parametru de toleranță, indicând o toleranță.

• PixelXorXfermode. Aplică o excepție simplă bitwise (XOR)

atunci când trageți peste culorile existente.

• PorterDuffXfermode. Un mod puternic cu care puteți folosi oricare dintre cele 16 reguli pentru amestecarea imaginilor Porter-Duff, controlând procesul de aplicare a unei perii unui desen existent.

Pentru a aplica unul dintre aceste moduri, utilizați metoda setXferMode:

AvoidXfermode evita = nou AvoidXfermode (Color.BLUE, 10, AvoidXfermode.Mode.AVOID);