นอกจากนี้ เอลิเมนต์ Group
และ Part*
ยังมีแอตทริบิวต์ tintColor, renderMode
และ blendMode
ซึ่งเป็นวิธีที่มีประสิทธิภาพในการปรับลักษณะที่ปรากฏของส่วนต่างๆ ของหน้าปัด
ใช้มาสก์การตัดกับโหมดการแสดงผล
renderMode
เปิดตัวใน WFF เวอร์ชัน 1 เพื่อใช้มาสก์การครอบตัด
renderMode
ใช้ได้กับองค์ประกอบ Group
และ Part*
ในลําดับชั้นของฉาก ลองดูวิธีแสดงผลกราฟฉากเพื่อให้เข้าใจวิธีการทำงานของฟีเจอร์นี้ได้ดียิ่งขึ้น
<Group> <Group> <PartDraw /> <PartText /> </Group> <PartImage /> </Group> |
|
โปรแกรมแสดงผลหน้าปัดจะวาดองค์ประกอบตามลําดับขณะที่ไปยังส่วนต่างๆ ของต้นไม้ฉาก
เมื่อใช้ renderMode
กับโหนด ผลจะมีผลภายใน Group
หลักของโหนดนั้นเท่านั้น ส่วนโหนดอื่นๆ ในกราฟจะไม่ได้รับผลกระทบ
หากไม่ได้ระบุ renderMode
ค่าเริ่มต้นจะเป็น SOURCE
ซึ่งหมายความว่าระบบจะวาดองค์ประกอบบนหน้าจอโดยตรง อย่างไรก็ตาม เมื่อองค์ประกอบอย่างน้อย 1 รายการอยู่ในโหนดหลักที่ระบุ MASK
(หรือ ALL
) ระบบจะใช้วิธีการอื่นดังนี้
- ระบบจะสร้างภาพพิมพ์แคนวาสนอกหน้าจอ
- ระบบจะวาดองค์ประกอบย่อยทั้งหมดที่มีการตั้งค่า
SOURCE
(ซึ่งเป็นค่าเริ่มต้น)- ระบบจะนำองค์ประกอบย่อยทั้งหมดที่เป็นส่วนหนึ่งของมาสก์ (
MASK, ALL
) ไปใช้กับผืนผ้าใบเพื่อตัดรูปภาพที่ได้
- ระบบจะนำองค์ประกอบย่อยทั้งหมดที่เป็นส่วนหนึ่งของมาสก์ (
โปรดทราบว่าการดำเนินการนี้จะไม่พิจารณาลําดับขององค์ประกอบในโหนดหลัก
ในตัวอย่างต่อไปนี้ รายการหลัก Scene
มีรายการย่อย 3 รายการ
- องค์ประกอบที่ 1 และ 3 เป็นองค์ประกอบ
MASK
จึงรวมเข้าด้วยกันเพื่อสร้างเลเยอร์การมาสก์ - องค์ประกอบที่ 2 เป็นเลเยอร์เดียวที่ไม่ได้มาสก์
<WatchFace width="450" height="450">
<Scene>
<PartDraw x="175" y="50" width="100" height="100" renderMode="MASK">
<Ellipse x="0" y="0" width="100" height="100">
<Fill color="#FFFFFF"></Fill>
</Ellipse>
</PartDraw>
<PartDraw x="0" y="0" width="450" height="450">
<Rectangle x="0" y="0" width="450" height="450">
<Fill color="#ff0000">
<LinearGradient startX="0" startY="0" endX="450" endY="450"
colors="..." positions="..." />
</Fill>
</Rectangle>
</PartDraw>
<PartText x="75" y="250" width="300" height="80" renderMode="MASK">
<Text align="CENTER">
<Font family="pacifico" size="72" weight="BOLD" color="#FFFFFF">Hello!</Font>
</Text>
</PartText>
</Scene>
</WatchFace>
ตัวเลือกที่ 3 สำหรับ renderMode
นอกเหนือจาก SOURCE
และ MASK
คือ ALL
ALL
ระบุว่าควรถือว่าองค์ประกอบเป็นทั้ง SOURCE
และ MASK
ซึ่งจะมีประโยชน์ในบางสถานการณ์
ใช้โหมดผสม
หมายเหตุ: ความสามารถนี้มีให้ใช้งานใน Watch Face Format เวอร์ชัน 3 ขึ้นไป
ตั้งแต่เวอร์ชัน 3 เป็นต้นไป Watch Face Format ให้คุณใช้โหมดการผสมเมื่อเขียนองค์ประกอบ Part*
ซึ่งแตกต่างจาก renderMode
ที่ใช้กลไกพิเศษในการสร้างแหล่งที่มาและหน้ากากตามลำดับ blendMode
ให้สิทธิ์เข้าถึงทั่วไปสำหรับเอฟเฟกต์โหมดการผสมกราฟิก Android ทั้งหมด และใช้เอฟเฟกต์ตามลำดับที่องค์ประกอบปรากฏในกราฟฉาก
ในการทํางานตามปกติ เมื่อวางองค์ประกอบ Part*
2 รายการไว้ในฉาก องค์ประกอบที่อยู่ด้านบนสุดจะบดบังหรือบดบังบางส่วนขององค์ประกอบที่ต่ำกว่าเนื่องจาก blendMode
เริ่มต้นคือ SRC_OVER
<PartDraw x="25" y="15" width="150" height="150">
<Rectangle x="0" y="0" width="150" height="150">
<Fill color="#ffd3ba" />
</Rectangle>
</PartDraw>
<PartText x="35" y="60" width="300" height="120">
<Text align="START">
<Font family="pacifico" size="96" weight="BOLD" color="#fb5607">Hello!</Font>
</Text>
</PartText>
ในการสาธิตการใช้โหมดผสม การเลือก SRC_ATOP
จะทิ้งพิกเซลต้นทางที่ไม่ได้ครอบคลุมพิกเซลปลายทาง กล่าวคือ PartText
คือต้นทาง และ PartDraw
คือปลายทาง
ด้วยเหตุนี้ ข้อความจึงวาดทับสี่เหลี่ยมผืนผ้าเท่านั้น และไม่วาดที่อื่นบนหน้าปัด
<PartDraw x="25" y="15" width="150" height="150">
<Rectangle x="0" y="0" width="150" height="150">
<Fill color="#ffd3ba" />
</Rectangle>
</PartDraw>
<PartText x="35" y="60" width="300" height="120" blendMode="SRC_ATOP">
<Text align="START">
<Font family="pacifico" size="96" weight="BOLD" color="#fb5607">Hello!</Font>
</Text>
</PartText>
คุณสามารถใช้เอฟเฟกต์ที่ซับซ้อนมากขึ้นได้ เช่น ใช้ COLOR_DODGE
แทน
SRC_ATOP
ซึ่งทำให้ปลายทางสว่างขึ้นเพื่อสะท้อนแหล่งที่มา
ตัวอย่างการรวมองค์ประกอบ Part*
หลายรายการโดยใช้โหมดผสมผสาน HUE
และ
COLOR_BURN
<Group name="container" x="75" y="100" width="300" height="300">
<PartDraw x="25" y="15" width="150" height="150">
<Rectangle x="0" y="0" width="150" height="150">
<Fill color="#ffd3ba" />
</Rectangle>
</PartDraw>
<PartDraw x="100" y="15" width="150" height="150" blendMode="HUE">
<Ellipse x="0" y="0" width="150" height="150">
<Fill color="#219ebc" />
</Ellipse>
</PartDraw>
<PartText x="35" y="60" width="300" height="120" blendMode="COLOR_BURN">
<Text align="START">
<Font family="pacifico" size="96" weight="BOLD" color="#fb5607">Hello!</Font>
</Text>
</PartText>
</Group>
ไม่มีเอฟเฟกต์ |
มีเอฟเฟกต์ |
ข้อควรพิจารณา
ส่วนต่อไปนี้อธิบายข้อควรพิจารณาบางอย่างที่ควรคำนึงถึงเมื่อใช้เอฟเฟกต์การครอบตัดและการผสม
โหมดการผสมจะใช้ก่อนโหมดการแสดงผล
หากโหนดมีองค์ประกอบ Part
ทั้ง 2 รายการที่ใช้ blendMode
และองค์ประกอบ Part
ที่ใช้ renderMode
ตั้งค่าเป็น MASK
(หรือ ALL
) ระบบจะใช้แนวทางต่อไปนี้
- แหล่งที่มาจะประกอบกัน รวมถึงการใช้โหมด
blendMode
- จากนั้นระบบจะใช้มาสก์จากองค์ประกอบเหล่านั้นที่ระบุ
rendermode="MASK
"
ตัวอย่างเช่น พิจารณาตัวอย่างก่อนหน้านี้ที่ใช้แล้ว และเพิ่มการมาสก์สี่เหลี่ยมผืนผ้า โดยสังเกตว่าลําดับขององค์ประกอบที่มีการมาสก์ไม่สําคัญ
<Group name="container" x="75" y="100" width="300" height="300">
<PartDraw x="25" y="15" width="150" height="150">
<Rectangle x="0" y="0" width="150" height="150">
<Fill color="#ffd3ba" />
</Rectangle>
</PartDraw>
<PartDraw x="100" y="15" width="150" height="150" blendMode="HUE">
<Ellipse x="0" y="0" width="150" height="150">
<Fill color="#219ebc" />
</Ellipse>
</PartDraw>
<PartDraw x="100" y="15" width="150" height="150" renderMode="MASK">
<Rectangle x="0" y="0" width="150" height="150">
<Fill color="#ffffff" />
</Rectangle>
</PartDraw>
<PartText x="35" y="60" width="300" height="120" blendMode="COLOR_BURN">
<Text align="START">
<Font family="pacifico" size="96" weight="BOLD" color="#fb5607">Hello!</Font>
</Text>
</PartText>
</Group>
ประสิทธิภาพ
การใช้ renderMode
และ blendMode
จะต้องมีขั้นตอนการคำนวณและการวาดเพิ่มเติม การแสดงผลบางอย่างอาจทำงานได้อย่างมีประสิทธิภาพในฮาร์ดแวร์ที่รองรับ ทั้งนี้ขึ้นอยู่กับอุปกรณ์ที่ใช้หน้าปัดอยู่ แต่อาจไม่สามารถทำได้ในอุปกรณ์รุ่นเก่า
ดังนั้นโปรดใช้ renderMode
และ blendMode
อย่างรอบคอบและคำนึงถึงผลกระทบที่การใช้งานอาจส่งผลต่อประสิทธิภาพโดยรวมของหน้าปัด
ใช้สี
คุณสามารถใช้ tintColor
กับองค์ประกอบ Part*
ทั้งหมด, Group
หรือไพ่แต่ละใบ เช่น HourHand
และ MinuteHand
ดังนี้
<WatchFace width="450" height="450">
<Scene>
<Group x="75" y="100" width="350" height="350" name="group1" tintColor="#ffd3ba">
<PartDraw x="25" y="0" width="100" height="100">
<Rectangle x="0" y="0" width="100" height="100">
<Fill color="#ffffff" />
</Rectangle>
</PartDraw>
<PartDraw x="150" y="0" width="100" height="100">
<Ellipse x="25" y="0" width="100" height="100">
<Fill color="#ffffff" />
</Ellipse>
</PartDraw>
<PartText x="0" y="150" width="300" height="80">
<Text align="CENTER">
<Font family="pacifico" size="72" weight="BOLD" color="#ffffff">Hello!</Font>
</Text>
</PartText>
</Group>
</Scene>
</WatchFace>
ซึ่งอาจมีประโยชน์สำหรับการจัดสไตล์ทั้งส่วนของหน้าปัด รวมถึงการใช้สไตล์จากการตั้งค่าของผู้ใช้ เช่น tintcolor="[CONFIGURATION.myThemeColor.0]"