PracticU

ציור על Canvas על ידי מגע

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › ציור על Canvas על ידי מגע
מילון מושגים:
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
אירוע - התרחשות שהמערכת מזהה ויכולה להגיב לה, כמו לחיצת עכבר, הקשה או סיום פעולה.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
אמולטור - תוכנה שמחקה מכשיר או סביבה אחרת, למשל כדי להריץ ולבדוק אפליקציית מובייל על המחשב.

ציור על Canvas על ידי מגע
מחברים בין Canvas ל-Touch Events ובונים רכיב ציור פשוט, שבו המשתמש מצייר באצבע קו כחול על המסך.
השלבים העיקריים
1. הרכיב: מחלקה בשם Painter שיורשת מ-View, עם constructor שמקבל Context ו-AttributeSet.
2. Path ו-Paint: בונים Path שיחזיק את מה שהמשתמש צייר, ו-Paint שמוגדר כ-STROKE, עם עובי קו וצבע כחול.
3. ציור ב-onDraw: הפונקציה מציירת עם canvas.drawPath(path, paint). בהתחלה ה-Path ריק.
4. מילוי ה-Path מאירועי מגע: דורסים את onTouchEvent ועושים switch על event.getAction(). ב-ACTION_DOWN קוראים ל-path.moveTo(event.getX(), event.getY()), כלומר שמים את העט בנקודה בלי לצייר, ומחזירים true. ב-ACTION_MOVE קוראים ל-path.lineTo עם אותם ערכים ומחזירים true. כל אירוע אחר מחזיר false.
5. הצבה ב-layout: מגדירים את Painter עם match_parent לרוחב ולגובה, כדי שיתפוס את כל המסך.
6. קריאה ל-invalidate: onDraw נקראת אוטומטית פעם אחת כשהרכיב מצויר בתחילת הריצה, והוספת נקודות ל-Path לא גורמת לה לרוץ שוב. אי אפשר לקרוא לה ישירות, כי ה-Canvas הוא פנימי ל-View. לכן ב-ACTION_MOVE קוראים ל-invalidate(), שגורמת לרכיב לצייר את עצמו מחדש.
7. בדיקה: באמולטור ובמכשיר האמיתי הקו מופיע תוך כדי הגרירה.
מגבלות
האפליקציה פשוטה: רק צבע כחול, עובי אחד, בלי undo ובלי בחירת צבע או גודל. ההרצאה הבאה מוסיפה בחירה של צבעים וגדלי עט.
השיעור הבא בקורס: שדרוג צייר שלנו על canvas

פרקי ההרצאה: ציור על Canvas על ידי מגע

  1. 00:00

    שילוב Canvas עם Touch Events

  2. 00:37

    יצירת רכיב Painter שיורש מ-View

  3. 01:17

    הגדרת Path ו-Paint לציור

  4. 02:32

    ציור הנתיב עם drawPath

  5. 03:10

    מילוי הנתיב ב-onTouchEvent

  6. 04:35

    התחלת קו עם moveTo

תמלול ההרצאה: ציור על Canvas על ידי מגע

הטקסט המלא של הדקות הראשונות בהרצאה «ציור על Canvas על ידי מגע» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אחרי שהכרנו את הקנבס וראינו איך אנחנו יכולים לצייר בעזרתו על המסך, ואחרי שבנושא קודם ראינו איך אנחנו יכולים להשתמש ב-Touch Events בכדי לזהות תזוזה של היוזר על המסך, בואו נשלב בין שני הדברים בשביל לגרום ליוזר לצייר על המסך על ידי Touch Events בעזרת רכיב הקנבס.

  2. 00:27

    אז בואו נייצר לעצמנו רכיב דומה לרכיב שעשינו בסרטון הקודם ונקרא לו פשוט Painter. אנחנו רוצים to extend View, אבל הפעם ה-View שאנחנו רוצים לבנות יהיה View כזה שמאפשר ל-User לצייר על המסך ולראות בדיוק את מה שהוא מצייר.

  3. 00:48

    אז בואו נגדיר לעצמנו כאן איזשהו public constructor כזה, painter, שמקבל context, כמו מקודם, ומקבל attribute set, כמו מקודם, ונעביר לסופר את ה-context ואת ה-attribute set, בצורה כזאת.

  4. 01:15

    עכשיו, בשביל לצייר, אנחנו רוצים שיהיה לנו איזשהו רכיב path, שמאפשר לנו לבצע את הציור עצמו, בואו נייצר new path, ואנחנו רוצים object paint, בצורה כזאת, שיגדיר לנו את המברשת או את המכחול עצמו.

  5. 01:51

    בואו נתחיל אותם, paint set style, ניתן paint style stroke, אנחנו רוצים לאפשר ליוזר בתור התחלה לצייר קווים, paint set stroke width, בואו ניתן לו SL, וpaint set color, ובואו נתחיל אותו עם נניח blue, רק בכדי לראות משהו שהיוזר מצייר על המסך בצבע כחול.

  6. 02:25

    אוקיי, אז איך אנחנו בעצם מבצעים את הציור עצמו? אז בסרטון הקודם ראינו שקיימת פונקציה שנקראת onDraw, והפונקציה הזאת מאפשרת לצייר על Canvas שהיא מקבלת.

  7. 02:42

    אם יש לנו Object Path שמכיל נתיב שהיוזר צייר, ויש לנו פן שמתארת איזשהו את לציור, אז אנחנו יכולים להשתמש בקנבס שאנחנו מקבלים, ולקרוא ל-Draw Path שראינו בסרטון הקודם, לתת לה את ה-path ולתת לה את ה-paint, ובצורה כזאת אנחנו יכולים פשוט לצייר את הנתיב הזה.

  8. 03:08

    אבל אנחנו רואים שהנתיב בכלל ריק כרגע, אין בו שום דבר. איפה אנחנו בעצם ממלאים אותו בתוכן? אז אנחנו רוצים שהיוזר, תוך כדי הציור שלו על המסך, יקבע מה התוכן של אובייקט ה-path.

  9. 03:24

    לכן אנחנו יכולים לרשת את On Touch Event, שלמדנו עליה בנושא ה-Touch Events, וראינו שלרכיבים ויזואליים יש פונקציה כזאת שאנחנו יכולים להשתמש בה בכדי לבצע ציור, ואנחנו רואים שאנחנו מקבלים כאן Object Event, שמתאר מה בעצם הפעולה שהיוזר עושה כרגע, האם הוא רק שם את האצבע או איזושהי עת אלקטרונית על המסך, האם הוא מזיז, האם הוא עוזב,

  10. 04:01

    והאם הוא עושה כל מיני דברים שונים על המסך עצמו. אז מה אנחנו רוצים לעשות? אנחנו רוצים, ברגע שהיוזר שם את האצבע על המסך, זה יהיה action down.

  11. 04:12

    אנחנו רוצים לגשת לפף וכאילו לשים בפף את האצבע של המשתמש. אז בואו נעשה פה איזשהו switch על event getAction ונבדוק האם אנחנו נמצאים ב-motionEvent.actionDown.

  12. 04:35

    אם אנחנו נמצאים ב-actionDown, אנחנו רוצים לגשת ל-path ו-to-move-to, כי ה-yuzer שם את האצבע על המסך במיקום מסוים. לשם אנחנו רוצים לגשת מבלי לצייר דבר עד לנקודה הזאת.

  13. 04:49

    זה יהיה event get x בכדי לקבל את מיקום ה-x של ה-user, event get y, שימו לב שאנחנו משתמשים פה בתשלובת של נתונים שלמדנו, בסרטון הקודם ראינו שאנחנו צריכים להשתמש ב-move2

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: שליחת מאפיינים לרכיב

ההרצאה הבאה: שדרוג צייר שלנו על canvas

הרצאות קשורות מקורסים אחרים

  • הרחבת GPO על-ידי ADM
  • CSS - עיצוב טבלה רק על ידי DIV
  • שימוש ב-Stored Procedure - על-ידי DTO
  • יצירת RAID 1 Mirror - על ידי LVM

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון