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.
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);