Kotlin编写DialogFragment音视频解析二
这篇文章是继续上一篇讲解得,上一篇我们说了一下关于Kotlin解析音视频得内容,上篇主要说了关于整个项目得回调方法,这篇我主要说一下关于项目里面重要的几个对话框。
第一个对话框,首先我把全部代码贴出来,然后一一分析。
class AudioDialog : DialogFragment() { var startTime: Long = 0 var finalTime: Long = 0 lateinit var mediaPlayer: MediaPlayer lateinit var countDownTimer: CountDownTimer companion object { val TAG = AudioDialog::javaClass.name lateinit var file: File fun show(fragmentManager: FragmentManager, file: File) { this.file = file AudioDialog().show(fragmentManager, TAG) } } @SuppressLint("SetTextI18n", "ClickableViewAccessibility") override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val view = activity!!.layoutInflater.inflate(R.layout.dialog_audio_preview, null) val seekBar = view.findViewById(R.id.seekBar) seekBar.isEnabled = false val info = view.findViewById(R.id.video_info) if (file != null) { mediaPlayer = MediaPlayer.create(activity, Uri.fromFile(file)) mediaPlayer.start() } finalTime = mediaPlayer.duration.toLong() startTime = mediaPlayer.currentPosition.toLong() seekBar.max = finalTime.toInt() mediaPlayer.setOnCompletionListener { dismiss() } seekBar.setMax(mediaPlayer.duration) seekBar.setOnTouchListener(object : OnTouchListener { override fun onTouch(v: View, event: MotionEvent): Boolean { return true } }) countDownTimer = object : CountDownTimer(mediaPlayer.duration.toLong(), 250) { override fun onTick(millisUntilFinished: Long) { startTime = mediaPlayer.currentPosition.toLong() info.text = "Duration: ${Utils.milliSecondsToTimer(mediaPlayer.duration.toLong())} " + getTime() seekBar.progress = seekBar.progress + 250 } override fun onFinish() { } }.start() return AlertDialog.Builder(activity) .setView(view) .setTitle("Preview") .setPositiveButton("Cancel") { dialog, which -> dismiss() } .create() } fun getTime(): String { return String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(startTime), TimeUnit.MILLISECONDS.toSeconds(startTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(startTime))) } override fun onPause() { super.onPause() mediaPlayer.stop() mediaPlayer.reset() mediaPlayer.release() countDownTimer.cancel() } }
整个对话使用到了一个MediaPlayer方法,主要是用来做音视频相关的业务,这也是Android 官网提供的API。
CountDownTimer 这个方法也是安卓OS包下面的一个方法,作用就是用倒计时用的。这里主要是用来解析一个视频的一个开始时间。
项目里面设计到一个布局界面这里我拿出来。
<?xml version="1.0" encoding="utf-8"?>
OK 大家看到这个布局应该知道具体做了什么了,就是一个弹窗来解析一下视频,然后裁剪开始时间和结束时间。