iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
0
Software Development

發現新大陸-Android Kotlin 開發之路系列 第 25

Day25_MediaPlayer_2

播放暫停停止按鈕

private fun checkButtonStatus() {

        when (buttonStatus) {

            "START" -> {
            
                if (animator.isPaused){
                    animator.resume()
                }else {
                    animator.start()
                }

                mediaPlayer.start()
                progressBar()

                startPauseBtn.text = "PAUSE"
                buttonStatus = "PAUSE"
            }

            "PAUSE" -> {

                animator.pause()

                mediaPlayer.pause()
                handler.removeCallbacksAndMessages(null)

                startPauseBtn.text = "START"
                buttonStatus = "START"
            }

            "STOP" -> {

                animator.end()

                mediaPlayer.pause()
                position = 0
                mediaPlayer.seekTo(position)

                handler.removeCallbacksAndMessages(null)
                progressStatus = 0
                musicProgressBar.progress = progressStatus


                startPauseBtn.text = "START"
                buttonStatus = "START"
            }
        }
    }

因為開始與暫停是存在於同一個 Button 裡,所以我們需要寫下一些判斷式。
判斷式的做法有許多種,我們今天的作法是先設定一個 ButtonStatus 來記錄現在使用者的狀態。
經過判斷使用者目前按下的按鈕來做出相對應的動作。

這裡我們先看 START 裡面我們做了些什麼事
我們來從我們會用到的元件來看看,首先是動畫的部分。
我們需要判斷動畫是否為暫停狀態,如果是的話我們會使用 Resume 而不是 Start ,這兩個方法會導致不同效果。
再來是進度條與 MediaPlayer 都要開始運作。
最後,要記得把 Button 畫面跟狀態改成 Pause 。
這樣按下 Start 的同時,同一個按鈕就會轉換成 Pause 模式。

我們再看一下 Stop 的部分,要特別提一下的部分是 MediaPlayer 地方。
讓播放的音樂從頭開始有幾種做法,我們這裡的做法是先暫停音樂然後移動到歌曲 0 毫秒的地方。
下次播放就可以重頭開始了。

我們這裡也可以看到我們針對進度條停止的方式是採用 handler.removeCallbacksAndMessages()
這個方法代表,把 handler 裡面的所有的工作(runnable)移除。也把 ProgressStatus 歸零。
這樣我們就能把這些元件都歸零囉。

把這些東西完成後,我們就可以製作出一個簡單的 MediaPlayer 了。
今天就先這樣,我們明天見~~~


上一篇
Day24_MediaPlayer_1
下一篇
Day26_Thread, Handler, Runnable 簡介
系列文
發現新大陸-Android Kotlin 開發之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言