PracticU

מצלמה - חלק 3 - צילום מתוך האפליקציה

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › מצלמה - חלק 3 - צילום מתוך האפליקציה
מילון מושגים:
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
לייאאוט - ארגון וסידור הרכיבים החזותיים על המסך או בדף, כמו מיקום כפתורים, טקסט ותמונות.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
אחסון - שמירת נתונים באופן קבוע על התקנים כמו דיסקים או שירותי ענן, כך שיישמרו גם לאחר כיבוי.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.

מצלמה - חלק 3 - צילום מתוך האפליקציה
עד עכשיו צילמנו דרך אפליקציית המצלמה של המכשיר. כאן נשארים בתוך האפליקציה שלנו ומציגים את מה שהמצלמה רואה ברכיב SurfaceView, כדי שאפשר יהיה בהמשך לצלם ולשמור מתוכה.
השלבים העיקריים
1. רכיב SurfaceView ב-Layout: מוסיפים SurfaceView עם match_parent לרוחב ולגובה, ו-ID, ומאתרים אותו ב-MainActivity עם findViewById. אפשר להציג בו מצלמה, וידאו, תמונות ועוד.
2. SurfaceHolder: ה-getHolder() של ה-SurfaceView מחזיר רכיב פנימי שהוא מקום התצוגה. נותנים אותו לרכיב שמציג (כאן המצלמה, ובהמשך אפשר וידאו) והוא משדר לתוכו, ואנחנו רואים את זה ב-SurfaceView.
3. Callback: קוראים ל-addCallback עם האקטיביטי עצמו, שמממש את SurfaceHolder.Callback. יש שלוש פונקציות: surfaceCreated, surfaceChanged ו-surfaceDestroyed.
4. surfaceCreated: פותחים את המצלמה עם Camera.open(0) (האינדקס מזהה מצלמה, למשל קדמית או אחורית), קוראים ל-setPreviewDisplay עם ה-holder ואז ל-startPreview. הקריאה ל-setPreviewDisplay צריכה להיות בתוך try/catch ובשגיאה מציגים Toast.
5. surfaceDestroyed: משחררים את המצלמה עם release, למשל כשהמשתמש עבר לאפליקציה אחרת. ב-surfaceChanged לא עושים כלום כרגע.
6. הרשאה: ב-Manifest מוסיפים הרשאת מצלמה. הרשאת WRITE_EXTERNAL_STORAGE כבר קיימת, לשמירת התמונה בהמשך.
7. כיוון התצוגה: באחזקת המכשיר בפורטרייט התמונה הופיעה מסובבת, ולכן לפני תחילת הצילום קוראים ל-setDisplayOrientation(90).
אחרי ההרצה על מכשיר אמיתי רואים את מה שהמצלמה קולטת בתוך האפליקציה. בשיעור הבא מוציאים את הקוד למחלקה נפרדת, ואחרי כן מוסיפים לחצן צילום.
השיעור הבא בקורס: מצלמה - חלק 4 - צילום מתוך האפליקציה - המשך

פרקי ההרצאה: מצלמה - חלק 3 - צילום מתוך האפליקציה

  1. 00:00

    צילום בלי אפליקציית המצלמה

  2. 00:39

    הכרת הרכיב Surface View

  3. 01:17

    הוספת Surface View ל-Layout

  4. 02:20

    אובייקט Surface Holder

  5. 03:38

    getHolder והעברתו למצלמה

  6. 04:32

    מימוש SurfaceHolder.Callback

  7. 05:10

    פתיחת המצלמה ב-surfaceCreated

  8. 06:08

    setPreviewDisplay להצגת המצלמה

תמלול ההרצאה: מצלמה - חלק 3 - צילום מתוך האפליקציה

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

  1. 00:02

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

  2. 00:25

    ולשמור אותה. אבל מה קורה אם אנחנו לא רוצים לעבור לאפליקציית הקאמרה ובכלל לא רוצים להשתמש באפליקציית הקאמרה, אלא אנחנו רוצים לא לצאת בכלל מהאפליקציה שלנו ולהראות באפליקציה שלנו כאילו קאמרה ולאפשר לצלם תמונה וגם לשמור אותה מתוך האפליקציה שלנו.

  3. 00:48

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

  4. 01:11

    ובהמשך כמובן להשתמש ב-surface view בשביל לצלם את התמונה אז כל מה שאנחנו צריכים לעשות זה פשוט להציג ב-layout שלנו רכיב מטיפוס surface view בואו נגדיר אותו כ-match parent בואו ניתן לו איזשהו ID נקרא לו Surface View Camera כעת אנחנו יכולים פשוט לגשת למיין אקטיביטי לאתר את הרכיב בואו נגדיר פה פרייבט Surface View הנה הוא כאן וה-ID שלו בואו נאתר אותו

  5. 02:00

    Surface View, Find View by ID ו-RID Surface View Camera, והנה קודם כל יש לנו גישה לרכיב הזה מה-Java Code. הדבר הבא שאנחנו צריכים לעשות זה להגדיר אובייקט שנקרא Surface Holder.

  6. 02:26

    ה-Surface Holder זה רכיב שבעצם בתוכו אנחנו מציגים את המידע שאנחנו רוצים. אפשר להתייחס אליו כאילו שהוא איזשהו קומפוננטה פנימית בתוך ה-Surface View.

  7. 02:40

    איך כל הסיפור הזה עובד? ה-Surface View צריך להביא לנו את הרכיב הפנימי שלו הזה, ה-Surface Holder, ואנחנו צריכים לתת את ה-Surface Holder לאותו רכיב שרוצה להציג את התצוגה.

  8. 02:54

    לדוגמה, לקאמרה. אם אנחנו נותנים לקאמרה בעזרת פונקציה מיוחדת את ה-Surface Holder, אז הקאמרה מציגה את עצמה בתוך ה-Surface Holder וזה ייראה בתוך ה-Surface View.

  9. 03:06

    אם אנחנו לדוגמה רוצים להציג וידאו, אז אנחנו צריכים לתת את ה-Surface Holder הזה לאיזשהו רכיב וידאו, ואז רכיב הוידאו ישדר את עצמו לתוך ה-Surface Holder, וכמובן אנחנו נראה את זה בתוך ה-Surface View, מפני שה-Surface View מביא לנו את ה-Surface Holder,

  10. 03:25

    הרכיב הפנימי הזה שלו אז בואו נראה איך אנחנו עושים את זה אז יש לנו פה את ה-Surface Holder ואנחנו רוצים לגשת ל-Surface View Camera שהשגנו ולגשת לפונקציה שנקראת Get Holder.

  11. 03:41

    פונקציית Get Holder מחזירה לנו את הרכיב הפנימי הזה שלו וכעת אנחנו יכולים לתת אותו לאיזשהו רכיב קאמרה או וידאו בהקשר הזה לקאמרה והיא תציג את עצמה בתוך ה-Surface Holder הזה ואנחנו כמובן, נראה את זה ב-Layout שלנו בתוך ה-Surface View שהגדרנו.

  12. 04:01

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

  13. 04:30

    אנחנו באים ל-Surface Holder וקוראים לפונקציה שנקראת Add Callback. הפונקציה הזאת מקבלת אינטרפייס Callback. בואו ניתן את This, נלחץ Alt Enter, נגדיר שאנחנו רוצים שה-Main Activity שלנו תממש את האינטרפייס הזה עם שלושת הפונקציות שבו, והנה יש לנו את זה כאן,

  14. 04:55

    SurfaceHolder.Callback, והפונקציות האלה זה פונקציות שמתרחשות כאשר ה-surface holder מבצע אתחול, שינוי והריסה. ואנחנו צריכים להתאים את המצלמה ל-holder בתוך ה-surface created.

  15. 05:14

    בתוך האירוע ה-surface created, ברגע שה-surface נוצר, איך שעליה עוד נוצר איתו ביחד, אז אירוע ה-surface created מתבצע ואנחנו בו רוצים להגדיר את המצלמה ולחבר אותה עם ההולדר שלנו.

  16. 05:32

    אז בתוך אירוע ה-surface created בואו ניגש לאובייקט הקאמרה שלנו הגלובלי ונכניס לתוכו camera.open פונקציה שפשוט פותחת את המצלמה, אנחנו יכולים לקרוא ל-open בצורה כזאת והיא הולכת למצלמת הדיפולט או לתת לה איזשהו ID של מצלמה אם יש מספר מצלמות.

  17. 05:54

    בואו ניקח ID 0, יכול להיות שיש לנו פרונט קאמרה ובאק קאמרה ואנחנו רוצים איזשהו אינדקס ספציפי של המצלמה. והדבר הבא שאנחנו פשוט רוצים לעשות זה camera.setpreview.display ולתת את אובייקט ההולדר שלנו.

  18. 06:16

    בואו ניתן את ה-surface holder בכדי שאובייקט המצלמה ידע בדיוק איפה לשדר את המצלמה וזה כמובן בהולדר שלנו. ואנחנו רואים שהמערכת רוצה שנעטוף את זה ב-try

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

ההרצאה הקודמת: מצלמה - חלק 2 - שמירת קובץ PNG

ההרצאה הבאה: מצלמה - חלק 4 - צילום מתוך האפליקציה - המשך

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

  • הזזת מצלמה
  • כתיבת טסטים - צילום מסך
  • מעבר בין המסכים בתוך האפליקציה ב-Flutter
  • הסבר על מודל TCP/IP - שכבת האפליקציה - שכבת היישום

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

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