36

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

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

但是它会停用播放器...

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

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

4

10 回答 10

75

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"/>
于 2017-03-08T08:45:53.383 回答
36

只需使用这个

exoPlayerView.setUseController(false);
于 2018-03-13T12:33:19.753 回答
17

科特林:

exoPlayerView.useController = false

爪哇:

exoPlayerView.setUseController(false);

XML:

app:use_controller="false"

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

于 2019-08-05T20:31:25.120 回答
10
exoPlayerView.setUseController(false);
于 2018-03-11T05:18:59.653 回答
6

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

mPlayerView.hideController();

于 2018-11-15T08:26:37.457 回答
4

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

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()
                }
            }
        }
    }
于 2017-09-05T13:37:00.670 回答
2

就我而言,我只想显示控制器并隐藏视频屏幕。我使用了 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"/>
于 2020-06-16T08:11:28.230 回答
1

exoPlayerView.useController = false

于 2021-01-07T10:15:47.553 回答
0

对 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

于 2022-01-12T16:39:54.920 回答
-4
controller.setVisibility(View.GONE);
controller.setVisibility(View.INVISIBLE); 

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

于 2017-02-16T02:07:00.010 回答