לאפליקציה שמפעילה מדיה נדרשים רכיבים בממשק המשתמש כדי להציג מדיה וגם לשלוט בהפעלה. ספריית Media3 כוללת מודול ממשק משתמש שמכיל מספר רכיבים של ממשק המשתמש. כדי להיות תלוי במודול ממשק המשתמש, צריך להוסיף את הפרטים הבאים של תלות:
Kotlin
implementation("androidx.media3:media3-ui:1.4.1")
מגניב
implementation "androidx.media3:media3-ui:1.4.1"
הרכיב החשוב ביותר הוא PlayerView
– תצוגה להפעלות של מדיה.
ב-PlayerView
מוצגים סרטונים, תמונות, כתוביות ועטיפת אלבום במהלך הפעלת המשחק.
וגם פקדי ההפעלה.
ב-PlayerView
יש שיטת setPlayer
לחיבור ולניתוק (על ידי
העברת מופעים של הנגן null
.
תצוגת נגן
אפשר להשתמש ב-PlayerView
להפעלות של סרטונים, תמונות ואודיו. הוא יוצר תמונה
וידאו וכתוביות למקרה של הפעלת סרטון, מפות סיביות להפעלת תמונה
ויכול להציג גרפיקה שכלולה כמטא-נתונים בקובצי אודיו. אפשר לכלול אותו
בקובצי הפריסה כמו כל רכיב אחר של ממשק המשתמש. לדוגמה, PlayerView
אפשר לכלול ב-XML הבא:
<androidx.media3.ui.PlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:show_buffering="when_playing"
app:show_shuffle_button="true"/>
קטע הקוד שלמעלה ממחיש ש-PlayerView
מספק
. ניתן להשתמש במאפיינים האלה כדי להתאים אישית את התנהגות התצוגה, כמו
וגם המראה והתחושה שלו. לרוב המאפיינים האלה יש רכיב מגדיר תואם
methods, שבהן אפשר להשתמש כדי להתאים אישית את התצוגה בזמן ריצה.
PlayerView
Javadoc מפרט את המאפיינים ואת השיטות המגדירות האלה ב-
על שלושת הפיצ'רים האלה.
אחרי ההצהרה על התצוגה בקובץ הפריסה, אפשר לחפש אותה בקטע
שיטת הפעילות onCreate
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView = findViewById(R.id.player_view) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView = findViewById(R.id.player_view); }
לאחר אתחול הנגן, אפשר לצרף אותו לתצוגה באמצעות קריאה לפעולה
setPlayer
:
Kotlin
// Instantiate the player. val player = ExoPlayer.Builder(context).build() // Attach player to the view. playerView.player = player // Set the media item to be played. player.setMediaItem(mediaItem) // Prepare the player. player.prepare()
Java
// Instantiate the player. player = new ExoPlayer.Builder(context).build(); // Attach player to the view. playerView.setPlayer(player); // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. player.prepare();
בחירת סוג הפלטפורמה
המאפיין surface_type
של PlayerView
מאפשר להגדיר את סוג הפלטפורמה
משמש להפעלת סרטון. מלבד הערכים spherical_gl_surface_view
(ש
הוא ערך מיוחד להפעלה של סרטון כדורי)
video_decoder_gl_surface_view
(לרינדור וידאו באמצעות תוסף
רינדור), הערכים המותרים הם surface_view
, texture_view
ו-none
. אם המיקום
התצוגה היא להפעלת אודיו בלבד, צריך להשתמש בnone
כדי להימנע מצורך
תיצור משטח, כי זה עלול להיות יקר.
אם הצפייה היא להפעלה רגילה של סרטון, surface_view
או texture_view
. ל-SurfaceView
יש כמה יתרונות על פני TextureView
למשך
הפעלת סרטון:
- הספק נמוך יותר באופן משמעותי צריכה מכשירים.
- תזמון פריימים מדויק יותר, ולכן הפעלת סרטון חלקה יותר.
- תמיכה בפלט וידאו באיכות HDR באיכות גבוהה יותר במכשירים מתאימים.
- תמיכה בפלט מאובטח כשמפעילים תוכן המוגן באמצעות DRM.
- היכולת לעבד תוכן וידאו ברזולוציה המלאה של המסך במכשיר מכשירי Android TV שמשפרים את שכבת ממשק המשתמש.
לכן, צריך לתת עדיפות ל-SurfaceView
על פני TextureView
כשהדבר אפשרי.
צריך להשתמש באמצעי התשלום TextureView
רק אם SurfaceView
לא מתאים לצרכים שלך. אחת
למשל, יש צורך באנימציות חלקות או בגלילה של פני השטח של הסרטון
לפני Android 7.0 (רמת API 24), כפי שמתואר בהערות הבאות. עבור
במקרה כזה, עדיף להשתמש במאפיין TextureView
רק כאשר הערך של SDK_INT
נמוך יותר
מ-24 (Android 7.0) ו-SurfaceView
אחרת.
ניווט באמצעות לחצני החיצים (D-pad) ב-Android TV
בשלט הרחוק של Android TV יש שלט רחוק בלחצני החיצים (D-pad) ששולח פקודות
הגעה כאירוע מרכזי ב-dispatchKeyEvent(KeyEvent)
מתוך Activity
. האלה
צריך לקבל גישה לתצוגת הנגן:
Kotlin
override fun dispatchKeyEvent(event: KeyEvent?): Boolean{ return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event) }
Java
@Override public boolean dispatchKeyEvent(KeyEvent event) { return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); }
כדי לנווט בהפעלה חשוב לבקש מיקוד בתצוגת הנגן
שמדלגים על מודעות ומדלגים על מודעות. כדאי לבקש את המיקוד בonCreate
Activity
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView.requestFocus() // ... }
Java
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView.requestFocus(); // ... }
אם אתם משתמשים בתכונה 'כתיבה' ב-Android TV, עליכם ליצור את AndroidView
שניתן להתמקד בו ולהאציל את האירוע על ידי העברה של פרמטר הצירוף אל
AndroidView
בהתאם:
AndroidView(
modifier = modifier
.focusable()
.onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
factory = { playerView }
)
שינוי של פריטים שניתן להזזה
כדי להציג את ההפעלה, PlayerView
משתמש/ת ב-PlayerControlView
אמצעי הבקרה וסרגל ההתקדמות. הפריטים הנשלפים שמשמשים את PlayerControlView
יכולים
ניתנים להחלפה על ידי פריטים בעלי שמות זהים שמוגדרים באפליקציה. צפייה
במסמך Javadoc PlayerControlView
לרשימה של פריטים שניתן לצייר עליהם
ניתן לשינוי.
התאמה אישית נוספת
במקרים שבהם נדרשת התאמה אישית מעבר למתואר למעלה, אנחנו מצפים שהאפליקציה מפתחים יוכלו להטמיע את רכיבי ממשק המשתמש שלהם במקום להשתמש ברכיבים באמצעות מודול ממשק המשתמש של Media3.