Kotlin编写DialogFragment音视频解析二

这篇文章是继续上一篇讲解得,上一篇我们说了一下关于Kotlin解析音视频得内容,上篇主要说了关于整个项目得回调方法,这篇我主要说一下关于项目里面重要的几个对话框。

第一个对话框,首先我把全部代码贴出来,然后一一分析。

Kotlin编写DialogFragment音视频解析二

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 大家看到这个布局应该知道具体做了什么了,就是一个弹窗来解析一下视频,然后裁剪开始时间和结束时间。

展开阅读全文

页面更新:2024-05-13

标签:对话框   布局   界面   作用   代码   业务   时间   方法   项目   内容   数码   视频

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top