栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记录探索安卓简单视频播放

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记录探索安卓简单视频播放

之前简单练习过Exoplayer,当前只是简单写一下,后面就再也没涉及此处。不过最近写起来了从而记录下。

1.Kotlin–VideoView

videoView结合自定义进度条,切换后台停止,再次打开时自动播放

    
    
        

        

        

        

            

            

            
        -->

    
     private lateinit var mVideoView: VideoView
     private lateinit var mCurrentTv: TextView
     private lateinit var mEndTv: TextView
     private lateinit var mSeekbar: SeekBar
     private lateinit var mCancel: ImageView
     private lateinit var mPauseImg: ImageView
     private lateinit var mStartImg: ImageView
     private lateinit var mStartPro: ProgressBar
     private lateinit var mSeekbarLinar: LinearLayout
     private var isPlay = true
     private var startInt = 0
     private var total = 0
  val handler: Handler = @SuppressLint("HandlerLeak")
     object : Handler() {
      }

      var runnable: Runnable = object : Runnable {
          override fun run() {
              progress() //执行更新
              if (!isPlay) {
                  handler.postDelayed(this, 500)
              }

          }
      }
    override fun onViewCreated(rootView: View, savedInstanceState: Bundle?) {
        super.onViewCreated(rootView, savedInstanceState)
         mVideoView = rootView.findViewById(R.id.video)
         mCurrentTv = rootView.findViewById(R.id.currentTv)
         mEndTv = rootView.findViewById(R.id.endTv)
         mSeekbar = rootView.findViewById(R.id.seekbar)
         mCancel = rootView.findViewById(R.id.cancel)
         mStartImg = rootView.findViewById(R.id.startImg)
         mPauseImg = rootView.findViewById(R.id.pauseImg)
         mSeekbarLinar = rootView.findViewById(R.id.seekbarLina)
         mStartPro = rootView.findViewById(R.id.startPro)//等待加载
         playStart()
         val uri = Uri.parse(“视频地址”)
    	mVideoView.setVideoURI(uri)
        //开始播放
        mStartImg.setonClickListener {
            if (isPlay) playStart()
        }
        //点击视频暂停
        mVideoView.setonTouchListener { _, _ ->
            if (mVideoView.isPlaying) {
                mPauseImg.visibility = View.VISIBLE
                mStartPro.visibility = View.GONE//等待加载圈
                mVideoView.pause()
                isPlay = true
            }
            false
        }
        //点击暂停按钮
        mPauseImg.setonClickListener {
            if (isPlay) playStart()
        }
        mVideoView.setonPreparedListener { mediaPlayer ->
            mediaPlayer.setonInfoListener(MediaPlayer.onInfoListener { _, what, _ ->
                if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                    mStartPro.visibility = View.GONE//等待加载圈
                }
                return@onInfoListener false
            })
        }

        //监听seekBar
        mSeekbar.setonSeekBarChangeListener(object : SeekBar.onSeekBarChangeListener {
            //进度已更改
            override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
                if (fromUser) {
                    progress()
                    mVideoView.seekTo(progress)
                }
            }

            override fun onStartTrackingTouch(seekBar: SeekBar) {}

            override fun onStopTrackingTouch(seekBar: SeekBar) {}
        })

        //在视频没有初始化之前禁止拖动
        mSeekbar.setonTouchListener { _, _ ->
            total == 0
        }
        //监听videoView是否播放完成
        mVideoView.setonCompletionListener { dismiss() }

    }

    private fun playStart() {
         showsDialog
         mStartImg.visibility = View.GONE
         mPauseImg.visibility = View.GONE
         mSeekbarLinar.visibility = View.VISIBLE
         mStartPro.visibility = View.VISIBLE//等待加载圈
         mVideoView.start()
         isPlay = false
         handler.postDelayed(runnable, 500)
     }
   //更新视频播放进度
    private fun progress() {
        startInt = mVideoView.currentPosition //现在的播放位置
        if (total <= 0) {
            total = mVideoView.duration //总的播放长度
            mSeekbar.max = total
        }
        mCurrentTv.text = transformationDate(startInt)
        mEndTv.text = transformationDate(total)
        mSeekbar.progress = startInt
    }

    //转换字符
    private fun changeString(num: Int): String {
        return if (num in 0..9) "0$num" else "" + num
    }

    //转换时分秒
    private fun transformationDate(times: Int): String {
        var second = times / 1000
        val time = second / 3600
        val branch = second / 60
        second %= 60
        return changeString(time) + ":" + changeString(branch) + ":" + changeString(second)
    }

    override fun onPause() {
        super.onPause()
       if (startInt != 0) {
              mVideoView.pause()
              isPlay = true
              startInt = mVideoView.currentPosition
              handler.removeCallbacks(runnable)
          }

    }

    override fun onStart() {
        super.onStart()
      if (startInt != 0) {
            isPlay = false
            mVideoView.start()
            mVideoView.seekTo(startInt)
            mStartImg.visibility = View.GONE
            mPauseImg.visibility = View.GONE
            handler.postDelayed(runnable, 500)
        }

    }

    override fun onDestroyView() {
        super.onDestroyView()
        handler.removeCallbacks(runnable)
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号