הרכיבים Group
ו-Part*
מספקים גם את המאפיינים tintColor, renderMode
ו-blendMode
, שמאפשרים לשנות את המראה של קטעים בתצוגת השעון.
שימוש במסכות חיתוך עם מצב רינדור
renderMode
הוצג בגרסה 1 של WFF כדי ליצור מסכת חיתוך.
אפשר להחיל את renderMode
על רכיבי Group
ו-Part*
בהיררכיית הסצנה. כדי להבין איך זה עובד, כדאי להבין איך מתבצע הרינדור של תרשים הסצנה:
<Group> <Group> <PartDraw /> <PartText /> </Group> <PartImage /> </Group> |
|
ה-renderer של תצוגת השעון מצייר את הרכיבים לפי הסדר בזמן שהוא עובר על עץ הסצנה.
כשמחילים את 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, ב-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>
אפשר להחיל אפקטים מורכבים יותר, כמו שימוש ב-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]"
.