UI 맞춤설정

Media3은 일부 맞춤설정 옵션을 제공하는 기본 PlayerView를 제공합니다. 추가 맞춤설정을 위해서는 앱 개발자가 자체 UI 구성요소를 구현해야 합니다.

권장사항

Media3 Player에 연결되는 미디어 UI (예: ExoPlayer, MediaController 또는 맞춤 Player 구현)를 구현할 때 앱은 최상의 UI 환경을 위해 다음 권장사항을 따르는 것이 좋습니다.

재생/일시중지 버튼

재생 및 일시중지 버튼이 단일 플레이어 상태와 직접적으로 일치하지 않습니다. 예를 들어 사용자는 플레이어가 일시중지되지 않았더라도 재생이 종료되거나 실패한 후에 재생을 다시 시작할 수 있어야 합니다.

구현을 간소화하기 위해 Media3은 표시할 버튼 (Util.shouldShowPlayButton)과 버튼 누르기 처리(Util.handlePlayPauseButtonAction)를 결정하는 util 메서드를 제공합니다.

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

상태 업데이트 수신 대기

상응하는 UI 업데이트가 필요한 상태 변경을 알리려면 UI 구성요소는 Player.Listener를 추가해야 합니다. 자세한 내용은 재생 이벤트 수신을 참고하세요.

UI를 새로고침하는 데는 비용이 많이 들 수 있으며 여러 플레이어 이벤트가 함께 전달되는 경우가 많습니다. 짧은 시간 내에 UI가 너무 자주 새로고침되지 않도록 하려면 일반적으로 onEvents만 수신 대기하고 거기서 UI 업데이트를 트리거하는 것이 좋습니다.

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

사용 가능한 명령어 처리

다양한 Player 구현과 호환되어야 할 수도 있는 범용 UI 구성요소는 사용 가능한 플레이어 명령어를 확인하여 버튼을 표시하거나 숨기고 지원되지 않는 메서드의 호출을 피해야 합니다.

Kotlin

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

Java

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