A festékobjektum legnagyobb előnyeinek kihúzása

A Paint osztály egy ecset és paletta kombinációja. Lehetővé teszi a grafikus primitívek megjelenítését, amelyeket rajzol a Vászon objektumra az előző részben leírt módszerekkel. A Paint objektum megváltoztatásával szabályozhatja a rajzban használt színt, stílust, betűtípust és speciális effektusokat.

SetColor módszer lehetővé teszi, hogy kiválassza az ecset színe, stílusa Szín tárgy (za- adott használatával setStyle módszer) - vagy felhívni a vázlatot grafikusan primitív (stroke) vagy kitöltés (a kitöltést), vagy mindkettő, és más, közvetlenül (STROKE_AND_FILL).

Ezen egyszerű módszerek mellett a Paint osztály támogatja az átláthatóságot, és különböző árnyékolókkal, szűrőkkei és hatásaival változtatható, komplex színeket és keféket tartalmaz.

Az Android SDK olyan projekteket tartalmaz, amelyek a Paint osztály legtöbb funkcióját biztosítják. Ezek a grafikus alkönyvtárban elérhetők más alkalmazásokkal, amelyek különböző API-kat mutatnak:

[sdk gyökérkönyvtár] \ samples \ ApiDemos \ src \ com \ android \ samples \ grafikák

A következő szakaszokban, akkor megtanulják, hogyan kell használni néhány ilyen képességekkel, és isprobuete azokat a gyakorlatban (például megtanulják, hogy za- kruglyat sarkok és dolgozik lejtőn), anélkül, hogy az összes lehetséges kombináció.

A transzlucencia alkalmazása. Az Android bármely színes tulajdonsága tartalmaz egy átlátszó tulajdonságot (alfa-csatorna).

Megadhatja, ha szín-leíró változót hoz létre, az argb és parseColor módszerekkel:

// A szín piros és fél átlátszóvá válik Int opacity = 127;

int intColor = Szín.argb (opacitás, 255, 0, 0);

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

Alternatív megoldásként meghatározhatja a meglévő objektum átláthatóságát

Festés a setAlpha módszerrel:

// A szín fél átlátszóvá tétele Int opacity = 127; myPaint.setAlpha (opacitás);

Létrehozása szín, a zavarosság kevesebb, mint 100% azt jelenti, hogy lyu- harcot egy primitív húzott vele, lesz részben átlátszó, hogy milyen mértékben fogjuk látni mindent, ami húzott alatta.

Az áttetszőség hatását bármely olyan osztályban vagy módszerben használhatja, amely színnel működik, beleértve a Paint, Shader, MaskFilter.

Ismertség az árnyékolókkal. A Shader-osztály kiterjesztései lehetővé teszik, hogy olyan festékelemeket hozzon létre, amelyek összetettebbé teszik az elemeket, mint egyszerű színt.

A legáltalánosabb árnyékolók a gradiens kitöltésére szolgálnak. A színátmenetek segítségével könnyen kétdimenziós rajzvastagságot és textúrát adhat. Az Android három gradiens árnyékolót támogat (a raszter és a kompozit mellett).

Ismertesse a szavak rajzolásának technikáit - a megszállás lényegében értelmetlen, ezért jobb, ha megnézzük a 2. ábrát. 15.1 megérteni, hogyan működik mindegyik árnyékoló. Balról jobbra a LinearGradient, a RadialGradient és a SweepGradient osztályok eredményei kerülnek bemutatásra.

A festékobjektum legnagyobb előnyeinek kihúzása

Az 1. ábrán. 15.1 nem mutatják a ComposeShader és BitmapShader osztályokat. Az első segítségével különböző árnyékolókat lehet keverni, a második pedig raszteres képek alapján hozhat létre ecseteket.

Az árnyékolók rajzolásakor a setShader módszerrel kell alkalmazni a Paint objektumon:

Festék shaderPaint = új festék ();

Mindaz, amit rajzolsz ezzel az ecsettel, a megadott színárnyalattal lesz festve, ahelyett, hogy egyszínű.

Adja meg a gradiens árnyékolókat. Amint az előző részekben tárgyaltuk, a színátmenetes árnyékolók lehetővé teszik a körvonalak festését egy interpolált színsémával. A gradiens kétféleképpen adható meg.

Az első egy egyszerű átmenet két szín között, amint azt a 15.19-es lista mutatja a LinearGradientShader példával.

15.19. Lineáris gradiens létrehozása

int colorFrom = Color.BLACK;

int colorTo = Color.WHITE;

LinearGradient lineárisGradientShader = új LinearGradient (x1, y1, x2, y2, colorFrom, colorTo, TileMode.CLAMP);

A 15.20-as listában bemutatott második módszer a részletesebb szétosztott összetett színszekvenciák leírását tartalmazza.

15.20. Radial gradiens létrehozása

int [] gradientColors = új int [3]; gradiensColors [0] = Color.GREEN; gradiensColors [1] = Szín. YELLOW; gradiensColors [2] = Color.RED;

float [] gradientPositions = új úszó [3];

gradientPositions [1] = 0,5f; gradiensPositions [2] = 1.0f;

RadialGradient radialGradientShader = új RadialGradient (centerX, centerY, sugár, gradientColors, gradientPositions, TileMode.CLAMP);

Az egyes gradiens árnyékolók (lineáris, sugárirányú és kibontva) lehetővé teszik a gradiens kitöltését a fenti módszerek valamelyikével.

Használja a kitöltési módokat az árnyékolókban. A gradiens árnyékolók ecsetméreteit határozottan meghatározott téglalap alakú határokkal vagy a középpont és a sugár hosszának kombinációjával határozzák meg. A raszter árnyékolókban az ecset mérete megegyezik a képmérettel.

Ha az árnyékoló kefe által meghatározott terület kisebb, mint a kitöltendő terület, a TileMode mód határozza meg, hogy a terület többi része hogyan tölti ki.

• CLAMP. Használja a színeket az árnyékoló szélei körül, hogy kitöltsön további helyet.

• MIRROR. Az árnyékképet vízszintesen és függőlegesen mutatja, így minden következő rész megérinti az előzőt.

• REPEAT. Az árnyékképet megismétli vízszintesen és függőlegesen, de nem jeleníti meg.

Használj szűrőket maszkokhoz. A MaskFilter osztály lehetővé teszi a Paint objektum vázlatos hatásainak meghatározását. A MaskFilter örököseit osztályok a külső objektum mentén helyezik át a Paint objektum alfa csatornájára.

Az Android a következő maszk szűrőket tartalmazza:

• BlurMaskFilter - a Festék objektum éleinek kifeszítésének elmosódott stílusát és sugarait állítja be;

• EmbossMaskFilter - állítja be a fényforrás irányát és a fényszintet, ami megkönnyíti a hatást.

Ha szûrõt szeretne alkalmazni egy maszkra, használja a setMaskFilter metódust, és paraméterként adja át a MaskFilter objektumot. A 15.21 lista bemutatja a EmbossMaskFilter szűrő alkalmazásának folyamatát a meglévő Paint objektumra.

Lista 15.21. A EmbossMaskFilter szűrő alkalmazása egy festékobjektumra

// Állítsa be a fényforrás irányát float [] irányt = új úszó []<1, 1, 1>;

// Állítsa be a fényszintet az úszó fényre = 0.4f;

// Válassza ki a spekularitás mértékét float specular = 6;

// Adja meg, hogy mely blur-szintet kell alkalmazni az úszó maszk blur = 3.5f;

EmbossMaskFilter emboss = új EmbossMaskFilter (irány, fény, tükröződés, homályosság);

Az SDK részét képező FingerPaint demo projekt tökéletes példa a MaskFilter objektumok használatára. Mindkét effektust bemutatja - a BlurMaskFilter és a EmbossMaskFilter.

Színszűrők használata. A Paint objektum alfacsatornáját átalakító maszk szűrőktől eltérően színes szűrők fogyasztják az egyes RGB csatornákat. A ColorFilter osztály minden leszármazottai figyelmen kívül hagyják az alfa csatornát az átalakítások során.

Az Android három színszűrőt tartalmaz.

• ColorMatrixColorFilter. Ez lehetővé teszi, hogy állítsa be a Paint tárgya ColorMatrix mátrix 4 x 5. Tárgyak ColorMatrix, általánosan használt használják, amikor a képfeldolgozó programot is prigo- ditsya egymást követő transzformációs segítségével mátrix szorzás.

• LightingColorFilter. Szorozzuk meg az első szín RGB csatornáit, mielőtt hozzáadjuk a második. Az egyes konverziók eredményei 0 és 255 között változhatnak.

• PorterDuffColorFilter. A Porter-Duff digitális képének tizenhat keverési módját kínálja a megadott színnek a Paint objektumra való alkalmazásához.

Színszűrőket használhat a setColorFilter módszerrel:

myPaint.setColorFilter (új LightingColorFilter (Color.BLUE, Color.RED));

A példák katalógusában talál egy Co-lorMatrixSample nevű alkalmazást, amely bemutatja a színszűrők és mátrixok működését.

Kontúrhatások használata. Eddig mérlegelték azokat a hatásokat, amelyek befolyásolták a mintát. A kontúrhatásokat a vázlatrajz szabályozására használják. Rendkívül hasznosak a kontúr grafikai primitívek rajzolásához, de bármilyen festékobjektumra alkalmazhatók, hogy befolyásolhassák a körvonalaikat.

Ezekkel a hatásokkal megváltoztathatja az alakzatok sarkának megjelenését és a körvonalakat. Az Android számos kontúrhatást tartalmaz.

• CornerPathEffect. Lehetővé teszi az éles sarkok simítását grafikus primitív formában, lekerekített helyettesítve.

• DashPathEffect. A szilárd kontúr rajzolása helyett a DashPathEffect segítségével rajzokat (kötőjeleket / pontokat) tartalmazó körvonalat hozhat létre. Meg lehet határozni a szilárd / üres szegmensek ismétlési mintázatát.

• DiscretePathEffect. Ugyanaz, mint a DashPathEffect, de hozzáad egy elemet a véletlenszerűséghez. Az egyes szegmensek hossza és az eredeti kontúrtól való eltérés mértéke jelennek meg.

• PathDashPathEffect. Lehetővé teszi egy új alak (kontúr) meghatározását, amelyet az eredeti kontúr nyomtatásaként használhat.

A következő osztályok segítenek a különböző kontúrhatások kombinálásában egyetlen festékobjektum összefüggésében:

• SumPathEffect - két effektusból álló sorozatot ad, amelyek mindegyike az eredeti vázlatra vonatkozik, majd az eredmények összekeverednek;

• ComposePathEffect - használja az első effektust, majd hozzáadja a második hatást az eredményhez.

A rajzolandó tárgy alakját befolyásoló kontúrhatások megváltoztatják az általa elfoglalt területet. Emiatt az ábrán alkalmazott festészeti effektusok új határokon rajzolódnak ki.

A vázlatos hatások a Paint objektumra a setPathEffect módszerrel kerülnek alkalmazásra:

A példák könyvtárában megtalálható egy útmutató a fenti hatások kezeléséhez.

Az Xfermode mód megváltoztatása. Az Xfermode mód megváltoztatása a Paint objektumra hatással van arra, ahogyan az új színek egymás fölé kerülnek a már rajzolt képek fölé.

Rendes körülmények között, a meglévő minta rajzolásakor új felső réteget hoz létre. Ha az új festékobjektum 100% -ban átlátszatlan, teljesen árnyékolja a rajzterület alatt mindent; ha áttetsző, akkor csak a szín alatti árnyékolás.

Az Xfermode alosztályok lehetővé teszik a viselkedés megváltoztatását.

• AvoidXfermode. Meghatározza azt a színt, amelyen a Paint objektum nem (vagy fordítva - csak rajta lehet) rajzol. Egy tolerancia paraméter is megadható, jelezve a toleranciát.

• PixelXorXfermode. Egy egyszerű bitrészletes kivételt (XOR) alkalmaz

amikor meglévő színeket rajzol.

• PorterDuffXfermode. Hatékony mód, amellyel bármelyik tizenhat szabályt alkalmazhat a Porter-Duff képek keverésére, és ellenőrizheti az ecsetet egy meglévő rajzra.

Az alábbi módok egyikének használatához használja a setXferMode metódust:

AvoidXfermode avoid = új AvoidXfermode (Color.BLUE, 10, AvoidXfermodeMode.AVOID);