Media3 menyediakan PlayerView
default yang menyediakan beberapa
opsi penyesuaian. Untuk penyesuaian lebih lanjut, developer aplikasi
diharapkan mengimplementasikan komponen UI mereka sendiri.
Praktik terbaik
Saat mengimplementasikan UI media yang terhubung ke Player
Media3 (misalnya,
implementasi ExoPlayer
, MediaController
, atau Player
kustom), aplikasi
disarankan untuk mengikuti praktik terbaik ini untuk mendapatkan pengalaman UI terbaik.
Tombol Putar/Jeda
Tombol putar dan jeda tidak sesuai dengan status pemutar tunggal. Misalnya, pengguna harus dapat memulai ulang pemutaran setelah berakhir atau gagal meskipun pemutar tidak dijeda.
Untuk menyederhanakan implementasinya, Media3 menyediakan metode utilitas untuk menentukan
tombol mana yang akan ditampilkan (Util.shouldShowPlayButton
) dan menangani penekanan tombol
(Util.handlePlayPauseButtonAction
):
Kotlin
val shouldShowPlayButton: Boolean = Util.shouldShowPlayButton(player) playPauseButton.setImageDrawable(if (shouldShowPlayButton) playDrawable else pauseDrawable) playPauseButton.setOnClickListener { Util.handlePlayPauseButtonAction(player) }
Java
boolean shouldShowPlayButton = Util.shouldShowPlayButton(player); playPauseButton.setImageDrawable(shouldShowPlayButton ? playDrawable : pauseDrawable); playPauseButton.setOnClickListener(view -> Util.handlePlayPauseButtonAction(player));
Memproses pembaruan status
Komponen UI perlu menambahkan Player.Listener
untuk diberi tahu tentang perubahan
status yang memerlukan update UI yang sesuai. Lihat
Memproses peristiwa pemutaran untuk mengetahui detailnya.
Memuat ulang UI dapat memerlukan biaya yang mahal dan beberapa peristiwa pemain sering kali
muncul bersamaan. Untuk menghindari memuat ulang UI terlalu sering dalam waktu singkat, sebaiknya
proses onEvents
saja dan picu update UI dari sana:
Kotlin
player.addListener(object : Player.Listener{ override fun onEvents(player: Player, events: Player.Events){ if (events.containsAny( Player.EVENT_PLAY_WHEN_READY_CHANGED, Player.EVENT_PLAYBACK_STATE_CHANGED, Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) { updatePlayPauseButton() } if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED)) { updateRepeatModeButton() } } })
Java
player.addListener(new Player.Listener() { @Override public void onEvents(Player player, Player.Events events) { if (events.containsAny( Player.EVENT_PLAY_WHEN_READY_CHANGED, Player.EVENT_PLAYBACK_STATE_CHANGED, Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) { updatePlayPauseButton(); } if (events.containsAny(Player.EVENT_REPEAT_MODE_CHANGED)) { updateRepeatModeButton(); } } });
Menangani perintah yang tersedia
Komponen UI tujuan umum yang mungkin perlu berfungsi dengan implementasi Player
yang berbeda harus memeriksa perintah pemutar yang tersedia untuk menampilkan atau menyembunyikan
tombol dan untuk menghindari memanggil metode yang tidak didukung:
Kotlin
nextButton.isEnabled = player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)
Java
nextButton.setEnabled(player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT));