Group
और Part*
एलिमेंट में tintColor, renderMode
और
blendMode
एट्रिब्यूट भी होते हैं. इनकी मदद से, वॉच फ़ेस के सेक्शन के दिखने के तरीके में बदलाव किया जा सकता है.
रेंडर मोड के साथ क्लिपिंग मास्क का इस्तेमाल करना
क्लिपिंग मास्क बनाने के लिए, renderMode
को WFF के वर्शन 1 में शामिल किया गया था.
renderMode
को सीन के क्रम में, Group
और Part*
एलिमेंट पर लागू किया जा सकता है. यह समझने के लिए कि यह कैसे काम करता है, देखें कि सीन ग्राफ़ को कैसे रेंडर किया जाता है:
<Group>
<Group>
<PartDraw />
<PartText />
</Group>
<PartImage />
</Group>
स्मार्टवॉच की होम स्क्रीन रेंडरर, सीन ट्री को ट्रैवर्स करते समय एलिमेंट को क्रम में ड्रॉ करता है.
जब किसी नोड पर renderMode
लागू किया जाता है, तो इसका असर सिर्फ़ उस नोड के पैरंट Group
पर पड़ता है. ग्राफ़ में मौजूद अन्य नोड पर इसका कोई असर नहीं पड़ता.
अगर कोई renderMode
नहीं दिया गया है, तो डिफ़ॉल्ट रूप से SOURCE
दिखता है. इसका मतलब है कि एलिमेंट को सीधे स्क्रीन पर ड्रॉ किया जाता है. हालांकि, जब पैरंट नोड में एक या एक से ज़्यादा एलिमेंट मौजूद हों और उनमें MASK
(या ALL
) एट्रिब्यूट की वैल्यू दी गई हो, तो एक अलग तरीके का इस्तेमाल किया जाता है:
- ऑफ़-स्क्रीन कैनवस बनाया जाता है
SOURCE
सेट (जो डिफ़ॉल्ट है) वाले सभी चाइल्ड एलिमेंट खींचे जाते हैं- मास्क (
MASK, ALL
) का हिस्सा होने वाले सभी चाइल्ड एलिमेंट, कैनवस पर लागू किए जाते हैं, ताकि नतीजे में मिली इमेज को क्लिप किया जा सके.
- मास्क (
ध्यान दें कि इसका मतलब है कि पैरंट नोड में मौजूद ऐलिमेंट के क्रम को ध्यान में नहीं रखा जाता.
नीचे दिए गए उदाहरण में, Scene
पैरंट में तीन बच्चे हैं:
- पहला और तीसरा एलिमेंट
MASK
एलिमेंट हैं. इसलिए, इन्हें एक साथ मिलाकर मास्किंग लेयर बनाई जाती है - दूसरा एलिमेंट, बिना मास्क वाली एकमात्र लेयर है
<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>
SOURCE
और MASK
के अलावा, renderMode
के लिए तीसरा विकल्प ALL
है.
ALL
से पता चलता है कि एलिमेंट को SOURCE
और MASK
, दोनों के तौर पर माना जाना चाहिए. यह कुछ मामलों में मददगार हो सकता है.
ब्लेंड मोड का इस्तेमाल करना
ध्यान दें: यह सुविधा, स्मार्टवॉच की होम स्क्रीन के फ़ॉर्मैट के वर्शन 3 और उसके बाद के वर्शन पर उपलब्ध है.
Watch Face Format के तीसरे वर्शन में, Part*
एलिमेंट बनाते समय ब्लेंड मोड लागू करने की सुविधा मिलती है.
renderMode
, सोर्स और मास्क को बनाने के लिए एक खास तरीके का इस्तेमाल करता है. वहीं, blendMode
सभी Android Graphics ब्लेंड मोड इफ़ेक्ट का सामान्य ऐक्सेस देता है. साथ ही, इफ़ेक्ट को उसी क्रम में लागू करता है जिस क्रम में एलिमेंट, सीन ग्राफ़ में दिखते हैं.
सामान्य ऑपरेशन में, जब सीन में दो Part*
एलिमेंट डाले जाते हैं, तो सबसे ऊपर वाला एलिमेंट, सबसे नीचे वाले एलिमेंट को पूरी तरह से या कुछ हद तक छिपा देता है. इसकी वजह यह है कि डिफ़ॉल्ट 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>
ज़्यादा जटिल इफ़ेक्ट भी लागू किए जा सकते हैं. जैसे, SRC_ATOP
के बजाय COLOR_DODGE
का इस्तेमाल करना. इससे सोर्स को दिखाने के लिए, डेस्टिनेशन को ज़्यादा चमकदार बनाया जाता है.
HUE
और
COLOR_BURN
ब्लेंड मोड का इस्तेमाल करके, एक से ज़्यादा Part*
एलिमेंट को जोड़ने का उदाहरण:
<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>
ज़रूरी बातें
यहां दिए गए सेक्शन में, क्लिपिंग और ब्लेंड इफ़ेक्ट का इस्तेमाल करते समय ध्यान रखने वाली कुछ बातों के बारे में बताया गया है.
रेंडर मोड से पहले ब्लेंड मोड लागू किया जाता है
अगर किसी नोड में blendMode
का इस्तेमाल करने वाले Part
एलिमेंट और MASK
(या ALL
) पर सेट किए गए renderMode
का इस्तेमाल करने वाले Part
एलिमेंट, दोनों मौजूद हैं, तो यह तरीका अपनाया जाता है.
- सोर्स को कॉम्पोज़ किया जाता है. इसमें
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]"
.