توفّر عناصر Group
وPart*
أيضًا سمتَي tintColor, renderMode
و
blendMode
اللتين تُعدّان طريقتَين فعّالتين لتعديل مظهر
أقسام خلفية شاشة الساعة.
استخدام أقنعة القطع مع وضع التقديم
تم تقديم renderMode
في الإصدار 1 من WFF لتحقيق قناع اقتصاص.
يمكن تطبيق 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>
الخيار الثالث لرمز renderMode
بالإضافة إلى SOURCE
وMASK
هو ALL
.
تشير القيمة ALL
إلى أنّه يجب التعامل مع العنصر على أنّه SOURCE
وMASK
، ما قد يكون مفيدًا في بعض السيناريوهات.
استخدام وضع المزج
ملاحظة: تتوفّر هذه الميزة في الإصدار 3 من تنسيق خلفية شاشة الساعة والإصدارات الأحدث.
بدءًا من الإصدار 3، يتيح لك تنسيق خلفية شاشة الساعة إمكانية تطبيق وضع دمج عند إنشاء عناصر Part*
.
على عكس renderMode
الذي يقدّم آلية خاصة لإنشاء
المصدر والقناع على التوالي، يقدّم blendMode
إمكانية وصول عامة إلى كل
تأثيرات وضع المزج في رسومات Android، ويطبّق التأثيرات بالترتيب الذي تظهر فيه
العناصر في الرسم البياني للمشهد.
في الوضع العادي، عند وضع عنصرَين من النوع 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>
يمكن تطبيق تأثيرات أكثر تعقيدًا، مثل استخدام 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
تستخدم عناصر 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]"
.