iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0

MediaPlayer

MediaPlayer

今天嘗試做一個非常簡單陽春的音樂撥放器。

需要實現的有一個旋轉的動畫、流程條、播放暫停停止按鈕、聲音調整條。

就讓我們來看看怎麼做吧。以下的程式碼都是在 MainActivity 中製作。

實作流程

MediaPlayer

lateinit var mediaPlayer: MediaPlayer
// setup mediaPlayer
        mediaPlayer = MediaPlayer.create(this, R.raw.hotel)
        musicTime = mediaPlayer.duration
        // setup up mediaPlayer CompletionListener
        mediaPlayer.setOnCompletionListener {
            startPauseBtn.text = "START"
            progressStatus = 0
            musicProgressBar.progress = progressStatus
        }

首先,我們自己需要建立一個 raw 的資料夾來放入我們的音樂。
我們實例化 MediaPlayer 透過 create 這個 method 來載入我們的音樂檔。
我們還需要整首音樂的長度來作運用,透過 duration 這個方法可以取得。

再來我們可以看到我們透過 setOnCompletionListener 來讓 Android 播完這首歌後,把所有狀態都初始化。

動畫

lateinit var animator: ObjectAnimator

animator = ObjectAnimator.ofFloat(littlebirdImageView, "rotation", 0f, 360f)
        animator.repeatCount = -1
        animator.duration = 5000
        animator.interpolator = LinearInterpolator()

我們先在 MainActivtiy 開始之初就先定義 animator 會是一個 ObjectAnimator 。
並在我們需要的時候初始化。
接下來我們就可以看到我們初始化了我們的 animator 這裡動畫的部份我們就不再多解釋了。
如果需要至知道更多可以到這裡看看。
但我們這裡要特別注意的是我們希望它可以不斷地旋轉,我們就可以運用 repeatCount 來設置。
而且,一開始 Android 所預設的動畫是非線性的動畫,你不特別設置線性動畫的話,會發現動畫要結束前都會變得特別慢。
這樣我們動畫就算設定完成,晚一些就能夠在我們需要的地方使用囉。

流程條(ProgressBar)

private fun progressBar() {

        musicProgressBar.max = musicTime

        runnable = Runnable {
            progressStatus += 1000
            musicProgressBar.progress = progressStatus
            handler.postDelayed(runnable, 1000)
        }
        runnable.run()
    }

ProgressBar 的部分我們嘗試使用 Runnable 來處理畫面更新的部分。
Thread, Handler, Runnable, 之後將會有專文介紹,今天我們就來看看這要如何使用吧。
我們建立了一個 Runnable 後,裡面會執行 progressbar 累加 1000 並且使用 handler.postDelayed 讓 Runnable 每 1000 毫秒 執行一次。

今天就先到這裡囉,我們明天再把所有的功能組合在一起~~~


上一篇
Day23_更新 RecyclerView 畫面
下一篇
Day25_MediaPlayer_2
系列文
發現新大陸-Android Kotlin 開發之路30

尚未有邦友留言

立即登入留言