音乐播放器

业务流程分析说明

1.首先设置了布局文件和获取了各个视图组件的引用。还创建了一个 MediaPlayer 对象,初始化了歌曲列表和当前歌曲索引。

2.设置了播放按钮、上一曲按钮和下一曲按钮的点击事件监听器。

3.创建了一个定时任务 updateSeekBar(),使用 Handler 定时更新 SeekBar 的进度。

4.在播放/暂停按钮的点击事件监听器中,通过判断 MediaPlayer 是否正在播放来进行播放和暂停的切换,并相应地更新按钮的图标。

5.在上一曲和下一曲按钮的点击事件监听器中,通过调用 playPreviousSong() 和 playNextSong() 方法切换到上一首和下一首歌曲,并更新歌曲标题

6.在 SeekBar 的进度变化监听器中,当用户拖动进度条时,通过调用 mediaPlayer.seekTo() 方法来改变歌曲的播放位置。

功能核心技术 

1.使用 MediaPlayer 类进行音乐播放,调用 MediaPlayer 的方法,可以实现音乐的播放、暂停、停止、切换等功能。

2.使用 SeekBar 控件实现进度条,通过设置 SeekBar 的最大值和进度,

3使用 postDelayed() 方法和 Runnable 接口,实现定时任务,用于更新进度条的显示。

4.使用集合存储歌曲列表,使用了 List<Song> 来存储歌曲列表。

功能模块说明与核心代码

1.使用 MediaPlayer 类进行音乐播放,调用 MediaPlayer 的方法,可以实现音乐的播放、暂停、停止、切换等功能。

// 初始化MediaPlayer
	mediaPlayer = MediaPlayer.create(this, 	songList.get(currentSongIndex).getAudioResourceId());
	// 设置按钮点击事件监听器
	btnPrevious.setOnClickListener(new View.OnClickListener() {
   	 @Override
   	 public void onClick(View v) {
        		// 实现上一曲功能
       	 	playPreviousSong();
    	}
	});

	btnPlayPause.setOnClickListener(new View.OnClickListener() {
    	@Override
    	public void onClick(View v) {
        	// 实现播放/暂停功能
        		if (mediaPlayer.isPlaying()) {
            	mediaPlayer.pause();
            	btnPlayPause.setImageResource(R.drawable.ic_play);
        		} else {
            	mediaPlayer.start();
            	btnPlayPause.setImageResource(R.drawable.ic_pause);
        		}
    		}
	});

	btnNext.setOnClickListener(new View.OnClickListener() {
    	@Override
    	public void onClick(View v) {
        	// 实现下一曲功能
        		playNextSong();
    	}
	});

2.使用 SeekBar 控件实现进度条,通过设置 SeekBar 的最大值和进度,

// 设置SeekBar的最大值
	seekBar.setMax(mediaPlayer.getDuration());
	// 设置SeekBar的进度变化监听器
	seekBar.setOnSeekBarChangeListener(new 	SeekBar.OnSeekBarChangeListener() {
    	@Override
    	public void onProgressChanged(SeekBar seekBar, int progress,boolean 		fromUser) {
        	if (fromUser) {
            	mediaPlayer.seekTo(progress);
       	 	}
    	}

3使用 postDelayed() 方法和 Runnable 接口,实现定时任务,用于更新进度条的显示。

private void updateSeekBar() {
    	// 使用Handler定时更新SeekBar的进度
   	 final android.os.Handler handler = new android.os.Handler();
   	 MainActivity.this.runOnUiThread(new Runnable() {
       	 @Override
       	 public void run() {
            	if (mediaPlayer != null) {
                	int currentPosition = mediaPlayer.getCurrentPosition();
                	seekBar.setProgress(currentPosition);
           	 }
            	handler.postDelayed(this, 1000); // 1000毫秒即1秒更新一次
        	}
    	});
	}

4.使用集合存储歌曲列表,使用了 List<Song> 来存储歌曲列表。

private static class Song {
    	private String songTitle;
    	private int audioResourceId;
    	private int coverResourceId;

    	public Song(String songTitle, int audioResourceId, int      	coverResourceId) {
        	this.songTitle = songTitle;
        	this.audioResourceId = audioResourceId;
        	this.coverResourceId = coverResourceId;
   	 }

   	 public int getAudioResourceId() {
      	  return audioResourceId;
 	   }
    	public String getSongTitle() {
       	 return songTitle;
   	 }
	}

// 添加歌曲...
songList.add(new Song("黑夜问白天");
songList.add(new Song("传奇");
songList.add(new Song("青春修炼手册");
songList.add(new Song("他说");

系统结果及分析

源码地址

https://github.com/aishuijiaodelili/musicplayer.git

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值