【问题标题】:ExoPlayer is not showing play/pause during video playbackExoPlayer 在视频播放期间不显示播放/暂停
【发布时间】:2021-06-20 03:48:20
【问题描述】:

我正在开发将使用 ExoPlayer 播放视频的应用程序。出于某种原因,当我尝试暂停视频播放器时,没有显示播放/暂停图标。我为仅播放/暂停制作了自定义布局并将其设置在 PlayerView 上。使用player.playWhenReady = trueplayer.playWhenReady = true 播放/暂停视频。在任何地方都找不到解决方案,看起来我错过了什么但不知道是什么。

custom_player_controller.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageButton android:id="@id/exo_play"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:background="#CC000000"
        style="@style/ExoMediaButton.Play"/>

    <ImageButton android:id="@id/exo_pause"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:background="#CC000000"
        style="@style/ExoMediaButton.Pause"/>

</FrameLayout>

我在 RecyclerView 中使用 ExoPlayer,这里是 RecyclerView 的 layout_item.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:focusable="true">

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/feed_video_player"
        app:surface_type="texture_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:resize_mode="fixed_width"
        app:controller_layout_id="@layout/custom_player_controller"
        android:paddingBottom="55dp"
        android:background="#000"/>

</RelativeLayout>

然后在 RVAdapter 中播放/暂停视频我正在这样做

setOnTouchListener(object : View.OnTouchListener {
    val gestureDetector: GestureDetector = GestureDetector(context, object:
        GestureDetector.SimpleOnGestureListener() {

        override fun onSingleTapUp(e: MotionEvent?): Boolean {
            super.onSingleTapUp(e)

            if (!player.playWhenReady) {
                player.playWhenReady = true
            } else {
                player.playWhenReady = false
            }

            return true
        }
    })

    override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
        gestureDetector.onTouchEvent(p1)
        return true
    }
})

它会暂停并播放视频,我所寻找的只是在视频暂停时显示暂停图标。谢谢。

【问题讨论】:

  • 你为什么使用 GestureDetector?
  • @Eyosiyas 因为我稍后会使用 onLongPress,我知道我可以只使用 onClickListener 但它不会改变任何东西

标签: android kotlin exoplayer


【解决方案1】:

要在 Exo Player 中播放和暂停,您将像这样使用它。

Exo Player 处理剩下的事情。

player.play(); //starts the playing process
player.pause(); //pauses the media.
player.setPlayWhenReady //this is not for play and pause functionality. It is designed for starting the playback when the resource is ready.

更新

使用以下播放器布局。

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/feed_video_player"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerVertical="true"
        android:background="@android:color/black"
        app:controller_layout_id="@layout/custom_player_controller"
        app:resize_mode="fixed_width"
        app:show_timeout="5000"
        android:paddingBottom="55dp"
        android:background="#000"
        app:use_controller="true" />

【讨论】:

  • 我只是想把它切换到``` player.play() player.pause() ```它会暂停/恢复视频,但播放/暂停图标仍然没有显示
  • 复制粘贴您的更新,但仍然是同样的问题
  • 这是一个有效的代码,IDK 发生在你身边的事情。只是为了确定您在尝试我的代码时是否删除了 GestureDetector?
  • 是的,我确实删除了它。不知道出了什么问题,我之前也实现过类似的实现,但是使用 java 并且 exoplayer 的大部分代码都在片段本身中引用视图持有者。现在我试图将所有这些代码放入 viewHolder
  • 共享适配器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2022-06-12
  • 1970-01-01
相关资源
最近更新 更多