基于 View 的界面使用入门

添加依赖项

Kotlin

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

Groovy

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

PlayerView

最重要的组件是 PlayerView,用于媒体播放的视图。PlayerView 在播放期间显示视频、图片、字幕和专辑封面,以及播放控件。

PlayerView 具有用于附加和分离(通过传递 nullPlayer 实例的 setPlayer() 方法。

PlayerView 可用于视频、图片和音频播放。在播放视频时,它会呈现视频和字幕;在播放图片时,它会呈现位图;并且可以显示音频文件中包含的元数据中的封面图片。您可以像添加任何其他界面组件一样,将其添加到布局文件中。例如,可以使用以下 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 方法。

为了提供更舒适的用户体验,如果您使用的是 ExoPlayer,请考虑添加 keepScreenOn Android 属性或设置唤醒锁定。您可以在后台工作页面中调查其他使设备保持唤醒状态的操作。

android:keepScreenOn="true"

在布局文件中声明视图后,可以在 activity 的 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(仅用于音频播放)。如需详细了解应选择哪种 Surface 类型,请参阅 Surface 页面