【问题标题】:Stopping Exoplayer on swiping in viewPager在 viewPager 中滑动时停止 Exoplayer
【发布时间】:2022-09-24 15:19:06
【问题描述】:

我正在制作一个卷轴类型的应用程序。
我制作了一个 ReelsFragment 和 ReelsAdapter。
我使用 View Pager 2 垂直滑动视图。
我正在使用 Exoplayer 播放视频。

我的问题是:

当我滑动视频时,第一个视频的音频仍在播放,或者您可以说彼此重叠。

我也用过\"onViewAttachedToWindow\“ 和 \”onViewDetachToWindow\" 函数但是 当我从第一个视频将视频滑动到第二个视频播放器时,它会停止,但第三个视频的播放器或者你可以说音频开始与第二个视频音频重叠,当我向后滑动播放器时,它也不起作用,只有黑屏显示。 如果我使用以上两个功能,就会出现这些问题。

那么我应该怎么做才能消除所有这些问题。
我的卷轴适配器代码是:-

class ReelsAdapter(private val context: Context,
               private var reelsList: ArrayList<Videos>):
RecyclerView.Adapter<ReelsAdapter.VideoHolder>() {



override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideoHolder {
    return VideoHolder(ItemReelsBinding.inflate(LayoutInflater.from(context), parent, false))
}

override fun onBindViewHolder(holder: VideoHolder, position: Int) {
    holder.videoTitle.text = reelsList[position].title

    holder.setVideoData(reelsList[position])

}



override fun getItemCount(): Int {
    return reelsList.size
}






inner class VideoHolder(binding: ItemReelsBinding): RecyclerView.ViewHolder(binding.root) {

    var videoTitle = binding.videoTitle
    var progressBar = binding.progressBar
    var reelsPlayer = binding.reelsExoplayer
    lateinit var player: ExoPlayer


    fun setVideoData(videos: Videos){

        try {
            player.release()
        }catch (e: Exception){}
        player = ExoPlayer.Builder(context).build()
        reelsPlayer.player = player
        val mediaItem = MediaItem.fromUri(videos.videoUrl!!)
        player.apply {
            this.setMediaItem(mediaItem)
            this.prepare()
        }
        progressBar.visibility = View.GONE
        player.play()


    }

}

override fun onViewAttachedToWindow(holder: VideoHolder) {
    super.onViewAttachedToWindow(holder)
    holder.player.play()
}

override fun onViewDetachedFromWindow(holder: VideoHolder) {
    super.onViewDetachedFromWindow(holder)
    holder.player.release()
    holder.player.prepare()
    holder.player.play()
}

我的 ReelFragment 代码:-

class ReelsFragment : Fragment() {

private lateinit var player: ExoPlayer
private lateinit var binding: FragmentReelsBinding
lateinit var dBRef: DatabaseReference
lateinit var reelList: ArrayList<Videos>
lateinit var reelsAdapter: ReelsAdapter


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
    val view = layoutInflater.inflate(R.layout.fragment_reels, container, false)
    binding = FragmentReelsBinding.bind(view)

    reelList = ArrayList()
    reelList.add(Videos(\"abc\", \"this is 1 tile\", \"https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA4%20(EPS%20increases%20BUT%20Profit%20DOES%20NOT%20%23Shorts.mp4?alt=media&token=2cac5508-21ba-48c1-8327-9a58f1d5a2c9\"))
    reelList.add(Videos(\"abc\", \"this is 2tile\", \"https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA15%20(Buy%20land%20with%2010%2C000--%20%23Shorts.mp4?alt=media&token=9f125381-7d55-494d-ab40-aa814309d415\"))
    reelList.add(Videos(\"abc\", \"this is 3 tile\", \"https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA8%20(7%25%20of%20PPF%20Better%20than%2011%25%20of%20Mutual%20Funds.%20HOW%20%23shorts.mp4?alt=media&token=2aee97ea-de77-4b8c-8e3c-103d6b34cdf3\"))
    reelList.add(Videos(\"abc\", \"this is 4 tile\", \"https://firebasestorage.googleapis.com/v0/b/klarify-3f5bc.appspot.com/o/Labour%20Law%20Advisor%2FA5%20(Printing%20Money%20is%20not%20the%20solution!%20%23Shorts.mp4?alt=media&token=713a0cb2-c122-4082-8d69-0f53a6dd30ba\"))

    reelsAdapter = ReelsAdapter(requireContext(), reelList)
    binding.reelsViewPager.adapter = reelsAdapter






    return view
}

    标签: android kotlin exoplayer android-viewpager2


    【解决方案1】:

    在这种不同的方法中尝试 ViewPager2.OnPageChangeCallback(),例如 onPageSelected、onpagescrolled,这有助于在滚动/滑动时停止第一个视频并播放第二个视频

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多