【发布时间】: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