首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VideoView inside Fragment,如何在滑动离开时停止播放视频?

VideoView inside Fragment,如何在滑动离开时停止播放视频?
EN

Stack Overflow用户
提问于 2018-08-12 03:46:57
回答 2查看 418关注 0票数 1

我有一个viewPager,我可以同时显示图像和视频。但是,当用户播放一个视频并且立即滑动到下一个片段时,前一个视频将继续播放!

下面是我播放视频的方式

代码语言:javascript
复制
videoView!!.setVideoURI(uri)
videoView!!.setMediaController(MediaController(context))
videoView!!.requestFocus()

play.setOnClickListener(View.OnClickListener {
    if (!videoView!!.isPlaying()) {
    videoView!!.start()
    videoView!!.setVisibility(View.VISIBLE)
}

我试过插入

代码语言:javascript
复制
if (videoView!!.isPlaying()) {
     videoView!!.setMediaController(null)
     videoView?.stopPlayback()
}

onStop中,onPauseonDetach显示了viewPager的片段,但它不起作用。

你的帮助将是无价的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-12 05:57:15

一个简单的界面:

代码语言:javascript
复制
interface Playable {

    fun play()

    fun stop()
}

包含VideoView的片段必须实现此接口

代码语言:javascript
复制
class VideoFragment : Fragment(), Playable {
...
    override fun play() {
        //play logic
    }

    override fun stop() {
        //stop logic
    }
...
}

PagerAdapter:

代码语言:javascript
复制
class PagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm){

    private val instantiatedItems = SparseArrayCompat<WeakReference<Any>>()
    private var selectedPosition: Int by Delegates.observable(-1) { _, oldPosition, newPosition ->
        fun playableAt(position: Int) = instantiatedItems.get(position)?.get() as? Playable
        playableAt(oldPosition)?.stop()
        playableAt(newPosition)?.play()
    }
...
    override fun instantiateItem(container: ViewGroup, position: Int): Any {
        return super.instantiateItem(container, position).also {
            instantiatedItems.put(position, WeakReference(it))
        }
    }

    override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
        instantiatedItems.remove(position)
        super.destroyItem(container, position, `object`)
    }

    fun onPageSelected(position: Int) {
        selectedPosition = position
    }
}

最后:

代码语言:javascript
复制
...
pager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
            override fun onPageSelected(position: Int) {
                adapter.onPageSelected(position)//this method is declared in PagerAdapter
            }
        }.also {
            pager.post { it.onPageSelected(pager.currentItem) }
        })
...
票数 1
EN

Stack Overflow用户

发布于 2018-08-12 06:11:16

你可以申请

代码语言:javascript
复制
if (videoView!!.isPlaying()) { videoView!!.setMediaController(null) videoView?.stopPlayback() ; 

pager.addOnPageChangeListener();中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51803178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档