PracticU

זיהוי מחווה - Swipe Gesture

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

זיהוי מחווה - Swipe Gesture
מ-Touch Events בסיסיים אפשר לחשב מחווה של swipe: האצבע נגעה, נגררה למרחק מסוים ועזבה. ההרצאה בונה זיהוי של הכיוון, שמאלה, ימינה, למעלה ולמטה.
איך זה עובד
1. שתי נקודות: מגדירים שני משתנים מסוג PointF, שמחזיקים x ו-y כ-float. p1 היא נקודת הנגיעה ו-p2 נקודת העזיבה.
2. שמירת הנקודות: ב-onTouchEvent עושים switch על event.getAction(). ב-ACTION_DOWN שומרים ב-p1 נקודה חדשה מ-getX ו-getY. ב-ACTION_UP שומרים את p2 וקוראים לפונקציה showSwipeData.
3. חישוב ההפרשים: מנקים את ה-TextView ומחשבים deltaX ו-deltaY כערך מוחלט של ההפרש בין הנקודות. מהירות האצבע לא נבדקת, והחשוב הוא המרחק.
4. קבוע למרחק מינימלי: מגדירים קבוע private final static float MIN_SWIPE_DISTANCE עם הערך 100, ולא מספר קבוע בקוד. נגיעה קצרה או תזוזה קטנה מאוד לא נחשבות swipe.
5. כיוון אופקי: אם deltaX גדול מהמינימום, בודקים אם ה-x של p1 גדול מה-x של p2. אם כן, ההודעה היא "you swipe left", ואחרת "you swipe right".
6. כיוון אנכי: אם deltaY גדול מהמינימום, משווים באותה דרך את ערכי ה-y. אם y של p1 גדול מזה של p2 זה כלפי מעלה, ואחרת "down". אפשר להגיע גם לשני כיוונים יחד, כמו right ו-down.
7. בדיקה: באמולטור ובמכשיר האמיתי רואים בכל גרירה את הכיוון, או את שני הכיוונים, בדיוק לפי התנועה.
שימו לב
ככל שרוצים לזהות עוד מחוות הקוד נעשה מורכב. ההרצאה הבאה מראה כלי מובנים שחוסכים את החישוב הזה.
השיעור הבא בקורס: זיהוי מובנה של Gesture Detectors

פרקי ההרצאה: זיהוי מחווה - Swipe Gesture

  1. 00:00

    מהי מחוות Swipe

  2. 01:00

    שמירת נקודות לחיצה ועזיבה עם PointF

  3. 02:19

    תפיסת Action Down ו-Action Up

  4. 03:23

    פונקציית showSwipeData

  5. 04:00

    חישוב הפרשי X ו-Y

תמלול ההרצאה: זיהוי מחווה - Swipe Gesture

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

  1. 00:02

    אז אחרי שהצלחנו לגלות אילו אירועי טאץ' בסיסיים היוזר ביצע על המסך, בואו נתרגם אותם למשהו שנקרא מחווה או ג'סטר.

  2. 00:14

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

  3. 00:39

    אז יש לנו כאן את האפליקציה שאנחנו רושמים את האירועים על ה-Activity, הורדתי את התמונה כרגע, וה-Main Activity ריקה, יש לנו פה רק את ה-Text View בכדי להציג מה בעצם היוזר מבצע מבחינת Swipe.

  4. 00:58

    אז איך אנחנו רוצים לעשות את זה? מה שאנחנו רוצים לעשות זה מתי היוזר ביצע לחיצה ומתי היוזר ביצע עזיבה ולמדוד את המרחק שהיה בין הלחיצה לבין העזיבה.

  5. 01:14

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

  6. 01:29

    אז יש לנו פוינט או פוינט F. פוינט F מאפשר לנו נקבל את ה-X או ה-Y כפלוט. אז בואו ניקח פוינט F ונקרא לזה פוינט 1, נקרא לזה P1 האמת, והנה יש לנו P2, ויש לנו עכשיו את שתי הנקודות, P1 זה עבור הלחיצה, P2 זה עבור העזיבה.

  7. 01:54

    אנחנו רוצים להירשם לאירוע של קבלת ה-Touch Events, זה היה ברמת ה-Activity on Touch Event, ומה שאנחנו רוצים לעשות, בואו נחזיר false בסוף, זה switch על event get action בכדי לדעת מהם ה-touch הבסיסיים שהתבצעו.

  8. 02:20

    כאשר אנחנו נמצאים ב-motion event.action down, זה אומר שהיוזר רק לחץ "אנחנו רוצים לגשת ל-p1" ולבנות אובייקט point f חדש ולתת לו את get x ואת get y, אז יש לנו את הנקודה שבה משתמש לחץ.

  9. 02:46

    בואו נחזיר טור. ניקח את כל הסיפור הזה, נעתיק, נדביק ונירשם או נגלה את Action App. ברגע שהיוזר עוזב אנחנו רוצים לקחת את הנקודה שהוא עזב בה לפי שתיים אבל אז אנחנו רוצים גם לגלות מה בעצם קרה בנקודה הזאת האם בעצם היה סווייפ או שהוא רק נגע ועזב

  10. 03:13

    או שהוא רק נגע וזז ממש ממש ממש קצת, וזה ממש לא נקרא סווייפ מבחינתנו. אז בואו נקרא לפונקציה שאנחנו הולכים לכתוב, ונקרא לה showSwipeData. אנחנו רוצים לבנות אותה private void, הנה הפונקציה שלנו, ואנחנו רוצים לקרוא לה רק בעזיבה, רק שהיוזר עוזב, בואו נראה מה בעצם קרה כרגע.

  11. 03:45

    יש לנו את שתי הנקודות, וכל מה שאנחנו צריכים לעשות זה לבדוק מה הערכים שלהם. קודם כל בואו ניגש לטקסט view event וננקה אותו מהדפסות קודמות.

  12. 03:56

    לאחר מכן אנחנו רוצים לקבל מה המרווח של ה-Xים ומה המרווח של ה-Yים. אז בואו ניקח דלתא X, כן, דלתא זה ההפרש של ה-Xים, וזה מתבצע על ידי math.absolute של p1x פחות p2x. מה זה אומר?

  13. 04:23

    זה אומר שאנחנו גילינו מה המרווחים בxים, שזה יכול להיות 0 וזה יכול להיות יותר. בואו נשכפל את כל הסיפור הזה לדלתא y וניקח את p1y פחות p2y ויש לנו עכשיו את הדלתות, כל אחד מהם יכול להיות 0 או יותר ואף אנחנו רוצים לבדוק.

  14. 04:51

    מידה ודלתא X יותר גדול מאיזשהו מינימום שאנחנו שמים לעצמנו.

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

ההרצאה הקודמת: זיהוי מגע בתוך רכיב

ההרצאה הבאה: זיהוי מובנה של Gesture Detectors

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

  • זיהוי חטיפת DLL
  • זיהוי משתמשים - identity awareness - חלק 1
  • עקיפה של זיהוי ROOT ב-UnCrackable3
  • עבודה עם UITableViewController - הוספה דינמית של פריטים, מחיקה דינמית וסידור המידע ב-swipe

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

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