【问题标题】:How to hide control buttons in ExoPlayer2如何在 ExoPlayer2 中隐藏控制按钮
【发布时间】:2017-07-04 22:33:20
【问题描述】:

如何在 ExoPlayer2 中隐藏所有不存在的控制器(开始按钮、暂停等),并且屏幕总是满屏。

我看了,有simpleExoPlayerView.setUseController(true)方法;

但它会停用播放器...

public void setUseController (boolean useController) {
    this.useController = useController;
if (useController) {
      controller.setPlayer(player);
    } else {
      controller.hide();
      controller.setPlayer(null);
    }
}

如何隐藏或删除这些组件?

【问题讨论】:

    标签: java android exoplayer exoplayer2.x


    【解决方案1】:

    使用ExoPlayer-r2.2.0

    videoView.hideController();
    videoView.setControllerVisibilityListener(new PlaybackControlView.VisibilityListener() {
        @Override
        public void onVisibilityChange(int visibility) {
            if(visibility == View.VISIBLE) {
                videoView.hideController();
            }
        }
    });
    

    app:use_controller="false" 在布局中

    <...
        xmlns:app="http://schemas.android.com/apk/res-auto"
        ...>
    
        <com.google.android.exoplayer2.ui.SimpleExoPlayerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:use_controller="false"/>
    

    【讨论】:

    • 当使用 app:use_controller="false" 然后点击事件在 exoplayer2 上不起作用
    • 我只想播放视频,即使 use_controller 设置为 false,clicklistener 仍然显示控件
    【解决方案2】:

    只需使用这个

    exoPlayerView.setUseController(false);
    

    【讨论】:

    • 如何只对控制器隐藏下一个按钮?
    • @MuhammedHaris 尝试在一个新问题中提出这个问题
    【解决方案3】:

    科特林:

    exoPlayerView.useController = false
    

    Java:

    exoPlayerView.setUseController(false);
    

    XML:

    app:use_controller="false"
    

    文档: https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/PlayerView.html#setUseController-boolean-

    【讨论】:

      【解决方案4】:
      exoPlayerView.setUseController(false);
      

      【讨论】:

        【解决方案5】:

        PlayerView 有一个 hideController 方法。 你可以这样称呼它:

        mPlayerView.hideController();

        【讨论】:

          【解决方案6】:

          为了解决这个问题,我这样做了:

          Kotlin 中的代码

          simpleExoPlayerView.setControllerVisibilityListener { visibility ->
                  val layout = activity.findViewById<LinearLayout>(R.id.ll_customPlayBackControlView)
                  if (layout.tag != "IN_ANIMATION") {
                      when (visibility) {
                          View.GONE -> {
                              layout.tag = "IN_ANIMATION"
                              ex_fragmentVideoView.showController()
                              layout.animate().alpha(0F).setDuration(450L).withEndAction({ ex_fragmentVideoView.hideController(); layout.tag = "" }).start()
                          }
                          View.VISIBLE -> {
                              layout.animate().alpha(1F).setDuration(450L).start()
                          }
                      }
                  }
              }
          

          【讨论】:

            【解决方案7】:

            就我而言,我只想显示控制器并隐藏视频屏幕。我使用了 PlaybackControlView。

                 <com.google.android.exoplayer2.ui.PlaybackControlView
                        android:id="@+id/player_view"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:background="@color/quantum_yellow"/>
            

            【讨论】:

              【解决方案8】:

              exoPlayerView.useController = false

              【讨论】:

                【解决方案9】:

                这个答案对Jetpack的简单改编

                @Composable
                fun VideoPlayer(myVideo: MyVideo, modifier: Modifier = Modifier) {
                    val context = LocalContext.current
                    val exoPlayer = remember {
                        ExoPlayer.Builder(context).build().apply {
                            setMediaItem(myVideo.asMediaItem())
                            repeatMode = ExoPlayer.REPEAT_MODE_ALL
                            playWhenReady = true
                            prepare()
                            play()
                        }
                    }
                    DisposableEffect(
                        AndroidView(
                            modifier = modifier,
                            factory = {
                                PlayerView(context).apply {
                                    player = exoPlayer
                                    useController = false
                                    FrameLayout.LayoutParams(
                                        ViewGroup.LayoutParams
                                            .MATCH_PARENT,
                                        ViewGroup.LayoutParams
                                            .MATCH_PARENT
                                    )
                                }
                            }
                        )
                    ) {
                        onDispose {
                            exoPlayer.release()
                        }
                    }
                }
                

                这将是asMediaItem() 扩展函数

                private fun MyVideo.asMediaItem() =
                    MediaItem.Builder()
                        .setUri(url)
                        .setMediaId("some-media-id")
                        .setTag("some-video-tag")
                        .setMediaMetadata(
                            MediaMetadata.Builder().setDisplayTitle("Video").build()
                        )
                        .build()
                
                

                和 MyVideo 类,它模拟了一个非常基本的视频

                data class MyVideo(val url: String, val previewImage: String)
                

                这里删除控件的关键是useController = false

                【讨论】:

                  【解决方案10】:
                  controller.setVisibility(View.GONE);
                  controller.setVisibility(View.INVISIBLE); 
                  

                  使用其中任何一个来设置可见性。 Android 文档:Link

                  【讨论】:

                    猜你喜欢
                    • 2012-02-21
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-03-19
                    • 1970-01-01
                    相关资源
                    最近更新 更多