開始使用以 View 為基礎的 UI

新增依附元件

Kotlin

implementation("androidx.media3:media3-ui:1.6.0")

Groovy

implementation "androidx.media3:media3-ui:1.6.0"

PlayerView

其中最重要的元件是 PlayerView,這是用於媒體播放的檢視畫面。PlayerView 會在播放期間顯示影片、圖片、字幕和專輯封面,以及播放控制項。

PlayerView 提供 setPlayer() 方法,可用於附加和卸除 (透過傳遞 null) Player 例項。

PlayerView 可用於播放影片、圖片和音訊。在影片播放的情況下,它會算繪影片和字幕,在圖片播放的情況下則會算繪位圖,並可顯示音訊檔案中以中繼資料形式加入的圖片。您可以像其他 UI 元件一樣,將其納入版面配置檔案中。舉例來說,您可以透過以下 XML 加入 PlayerView

<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 提供多個屬性。這些屬性可用於自訂檢視畫面的行為,以及外觀和風格。這些屬性大多都有對應的 setter 方法,可用於在執行階段自訂檢視畫面。PlayerView 說明文件會更詳細列出這些屬性和 setter 方法。

在版面配置檔案中宣告檢視區塊後,即可在活動的 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();

PlayerControlView

PlayerControlViewPlayerView 子檢視圖之一,其中包含進度列和用於控制播放的按鈕。請注意,PlayerControlView 不應用於 PlayerView 以外的獨立元件。您可以透過設定 PlayerView 的屬性 (會傳遞至 PlayerControlView),或是透過 android:id="@id/exo_controller 提供自訂控制器,來自訂控制器。

選擇表面類型

PlayerViewsurface_type 屬性可讓您設定用於影片播放的途徑類型。允許的值為 surface_viewtexture_viewspherical_gl_surface_view (這是球面影片播放的特殊值)、video_decoder_gl_surface_view (用於使用擴充功能轉譯器進行影片轉譯) 和 none (僅限音訊播放)。如要進一步瞭解應選擇哪種途徑類型,請參閱「途徑」頁面