如何解决如何让seekbar的thumb跟随Videoview的当前时间?
我以某种方式让我的视频视图跟随搜索栏拇指,但我找不到反之亦然的方法:使拇指跟随视频视图的当前时间。
这是我的代码。
class play_video : AppCompatActivity() {
var seekbar:SeekBar? = null
var vidView:VideoView? = null
var current_time:TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_play_video)
seekbar = findViewById<SeekBar>(R.id.seekbar_movie)
vidView = findViewById<VideoView>(R.id.videoView)
current_time = findViewById<TextView>(R.id.currenttime)
val viduri = Uri.parse("android.resource://" + packageName + "/" + R.raw.test1)
val updateHandler = Handler()
vidView?.setVideoURI(viduri)
val metadata = MediaMetadataRetriever()
metadata.setDataSource(this,viduri)
val vidLength = metadata.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
seekbar?.max = vidLength!!.toInt()
set_time(vidLength!!.toInt())
vidView?.setOnClickListener {
if(vidView!!.isPlaying)
vidView?.pause()
else
vidView?.start()
}
seekbar?.setProgress(vidView!!.currentPosition)
vidView?.start()
seekbar?.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener
{
override fun onProgressChanged(p0: SeekBar,p1: Int,p2: Boolean)
{
seekbar?.progress?.let { vidView?.seekTo(it) }
val p1_sec = (p1/1000).toInt()
val p1_minute = (p1_sec/60).toInt()
val p1_second = p1_sec%60
current_time?.text = p1_minute.toString() + ":" + p1_second.toString()
}
override fun onStartTrackingTouch(p0: SeekBar)
{
seekbar?.progress?.let { vidView?.seekTo(it) }
}
override fun onStopTrackingTouch(p0: SeekBar)
{
if(vidView!!.isPlaying)
vidView?.start()
}
})
}
我搜索了很多文章,但无法理解如何单独使用 videoview。我应该使用 MediaPlayer 重新编码,还是有更好的方法?
解决方法
您只需创建一个处理程序,它会重复并设置搜索栏。将此代码放入 onCreate 函数中。
val handler = Handler(Looper.getMainLooper())
runOnUiThread(object : Runnable {
override fun run() {
seekbar?.setProgress(vidView!!.currentPosition)
handler.postDelayed(this,1000) //Set the update time
}
}
1000 毫秒只是一个例子,如果你想让你的搜索栏更新得更快,你应该使用更小的延迟。
我自己做了,这是现场搜索栏和性能之间的最佳折衷。您还可以编辑延迟以加快更新速度。
但请记住在 onProgressChanged
中添加一个检查,例如 if(p2) { }
,这样进度只会在用户更改进度而不是系统本身时发生变化。
像这样:
override fun onProgressChanged(p0:SeekBar,p1:Int,p2:Boolean)
{
if(p2) {
seekbar?.progress?.let { vidView?.seekTo(it) }
val p1_sec = (p1/1000).toInt()
val p1_minute = (p1_sec/60).toInt()
val p1_second = p1_sec%60
current_time?.text = p1_minute.toString()+":"+p1_second.toString()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。