Cómo ocultar botones de control en ExoPlayer2

3 minutos de lectura

Avatar de usuario de Nurlan Kanimetov
nurlan kanimetov

Cómo ocultar todos los controladores en ExoPlayer2 (botón de inicio, pausa, etc.) que no existían y la pantalla siempre estaba llena.

Miré, hay simpleExoPlayerView.setUseController(true) método;

Pero desactivo el reproductor…

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

¿Cómo ocultar o eliminar estos componentes?

  • Consulte esto puede ser útil para Jetpack Compose: stackoverflow.com/a/71977304/3974530

    – Gato loco

    23 de abril de 2022 a las 6:14

Avatar de usuario de Junsu Lee
junsu lee

ExoPlayer-r2.2.0 usado

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

o

app:use_controller=”false” en Diseño

<...
    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"/>

  • cuando use la aplicación: use_controller=”false”, luego haga clic en el evento que no funciona en el exoplayer2

    – Amit Verma

    8 de abril de 2020 a las 15:19

  • Solo quiero reproducir un video, el clicklistener todavía muestra el control incluso con use_controller establecido en falso

    – JPM

    10 de agosto de 2021 a las 15:48

  • Consulte esto puede ser útil para Jetpack Compose: stackoverflow.com/a/71977304/3974530

    – Gato loco

    23 de abril de 2022 a las 6:14

Simplemente usa esto

exoPlayerView.setUseController(false);

  • ¿Cómo ocultar el siguiente botón solo desde el controlador?

    – Muhammed Haris

    25 de marzo de 2020 a las 11:13

  • @MuhammedHaris intente preguntar eso en una nueva pregunta

    – Westy92

    16 de septiembre de 2020 a las 15:08

  • Consulte esto puede ser útil para Jetpack Compose: stackoverflow.com/a/71977304/3974530

    – Gato loco

    23 de abril de 2022 a las 6:14

  • Después de aplicar setUseController(false);. su método onclicklistener no funciona.

    – Príncipe Dholakiya

    27 de agosto de 2022 a las 11:33


Avatar de usuario de Westy92
Westy92

Kotlin:

exoPlayerView.useController = false

Java:

exoPlayerView.setUseController(false);

XML:

app:use_controller="false"

Documentación:
https://exoplayer.dev/doc/reference/com/google/android/exoplayer2/ui/PlayerView.html#setUseController-boolean-

exoPlayerView.setUseController(false);

PlayerView tiene un método hideController. puedes llamarlo así:


mPlayerView.hideController();

Avatar de usuario de MarceloSouza
Marcelo Souza

Para resolver este problema hice esto:

Código en 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()
                }
            }
        }
    }

avatar de usuario de voghDev
voghdev

Una adaptación simple a Jetpack compone de esta respuesta

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

Esto sería asMediaItem() función de extensión

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

y la clase MyVideo, que modela un video realmente básico

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

La línea clave para eliminar los controles aquí es useController = false

  • El método VideoPlayer me funciona para detener el video mediante onDispose () ¡Gracias! El método simple mío es algo así como: stackoverflow.com/a/71977304/3974530

    – Gato loco

    23 de abril de 2022 a las 6:13

¿Ha sido útil esta solución?