使用kotlin写一个音乐播放器
时间: 2023-07-20 14:19:37 浏览: 26
好的,以下是一个简单的音乐播放器的Kotlin代码:
```kotlin
import android.media.MediaPlayer
import android.os.Bundle
import android.os.Handler
import android.support.v7.app.AppCompatActivity
import android.widget.Button
import android.widget.SeekBar
import android.widget.TextView
import java.util.concurrent.TimeUnit
class MainActivity : AppCompatActivity() {
private lateinit var mediaPlayer: MediaPlayer
private lateinit var playButton: Button
private lateinit var seekBar: SeekBar
private lateinit var currentPositionTextView: TextView
private lateinit var durationTextView: TextView
private lateinit var handler: Handler
private var isPlaying = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mediaPlayer = MediaPlayer.create(this, R.raw.song)
playButton = findViewById(R.id.playButton)
seekBar = findViewById(R.id.seekBar)
currentPositionTextView = findViewById(R.id.currentPositionTextView)
durationTextView = findViewById(R.id.durationTextView)
handler = Handler()
// 设置seekBar的最大值为音频的总长度
seekBar.max = mediaPlayer.duration
// 更新seekBar和当前位置文本的UI
updateUI()
// 播放按钮点击事件
playButton.setOnClickListener {
if (isPlaying) {
mediaPlayer.pause()
playButton.text = "播放"
} else {
mediaPlayer.start()
playButton.text = "暂停"
}
isPlaying = !isPlaying
}
// seekBar滑动事件
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
if (fromUser) {
mediaPlayer.seekTo(progress)
updateUI()
}
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {}
override fun onStopTrackingTouch(seekBar: SeekBar?) {}
})
}
// 更新UI的方法
private fun updateUI() {
handler.postDelayed({ // 使用handler每隔1秒更新UI
val currentPosition = mediaPlayer.currentPosition
seekBar.progress = currentPosition
currentPositionTextView.text = formatTime(currentPosition)
durationTextView.text = formatTime(mediaPlayer.duration)
updateUI()
}, 1000)
}
// 将时间格式化为"mm:ss"的方法
private fun formatTime(time: Int): String {
val minutes = TimeUnit.MILLISECONDS.toMinutes(time.toLong())
val seconds = TimeUnit.MILLISECONDS.toSeconds(time.toLong()) - TimeUnit.MINUTES.toSeconds(minutes)
return String.format("%02d:%02d", minutes, seconds)
}
// 在activity销毁时释放MediaPlayer资源
override fun onDestroy() {
super.onDestroy()
mediaPlayer.release()
}
}
```
这个示例代码中,我们使用了MediaPlayer来播放本地的一个音频文件,使用SeekBar来控制播放进度和展示播放进度,使用Handler每隔1秒更新UI,使用TimeUnit将毫秒转换为分钟和秒钟,并格式化时间为"mm:ss"格式。同时,在activity销毁时,我们也释放了MediaPlayer资源。
相关推荐
















