Kullanıcı arayüzü özelleştirmeleri

Media3, bazı özelleştirme seçenekleri sağlayan varsayılan bir PlayerView sağlar. Daha fazla özelleştirme için uygulama geliştiricilerin kendi kullanıcı arayüzü bileşenlerini uygulaması beklenir.

En iyi uygulamalar

Media3 Player'e bağlanan bir medya kullanıcı arayüzü (ör. ExoPlayer, MediaController veya özel bir Player uygulaması) uygularken uygulamaların en iyi kullanıcı arayüzü deneyimi için buradaki en iyi uygulamaları izlemesi önerilir.

Oynat/Duraklat düğmesi

Oynat ve duraklat düğmesi tek bir oyuncu durumuna doğrudan karşılık gelmez. Örneğin, kullanıcı sona erdikten veya oynatıcı duraklatılmış olmasa bile oynatma işlemi başarısız olduktan sonra yeniden başlatabilmelidir.

Uygulamayı basitleştirmek amacıyla Media3, hangi düğmenin gösterileceğine (Util.shouldShowPlayButton) ve basılmasına (Util.handlePlayPauseButtonAction) karar verilmesi için yardımcı yöntemler sağlar:

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));

Durum güncellemelerini dinleyin

İlgili kullanıcı arayüzü güncellemesi gerektiren durum değişikliklerinden haberdar edilmesi için kullanıcı arayüzü bileşeninin bir Player.Listener eklemesi gerekir. Ayrıntılar için Oynatma etkinliklerini dinleme bölümüne bakın.

Kullanıcı arayüzünü yenilemek maliyetli olabilir ve genellikle birden fazla oyuncu etkinliği bir araya gelir. Kullanıcı arayüzünün kısa süre içinde çok sık yenilenmesini önlemek için yalnızca onEvents öğesini dinlemek ve kullanıcı arayüzü güncellemelerini buradan tetiklemek genellikle daha iyidir:

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();
    }
  }
});

Kullanılabilir komutları işleme

Farklı Player uygulamalarıyla çalışması gerekebilecek genel amaçlı bir kullanıcı arayüzü bileşeni, düğmeleri göstermek veya gizlemek ve desteklenmeyen yöntemleri çağırmak için mevcut oynatıcı komutlarını kontrol etmelidir:

Kotlin

nextButton.isEnabled = player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT)

Java

nextButton.setEnabled(player.isCommandAvailable(Player.COMMAND_SEEK_TO_NEXT));