[代码] 变量申明
01 | /*变量声明*/ |
02 | private ImageButton playBtn = null;//播放、暂停 |
03 | private ImageButton latestBtn = null;//上一首 |
04 | private ImageButton nextButton = null;//下一首 |
05 | private ImageButton forwardBtn = null;//快进 |
06 | private ImageButton rewindBtn = null;//快退 |
07 | private TextView playtime = null;//已播放时间 |
08 | private TextView durationTime = null;//歌曲时间 |
09 | private SeekBar seekbar = null;//歌曲进度 |
10 | private Handler handler = null;//用于进度条 |
11 | private Handler fHandler = null;//用于快进 |
12 | private int currentPosition;//当前播放位置 |
[代码] 获得上一个activity传来的数据
01 | @Override |
02 | protected void onCreate(Bundle savedInstanceState) { |
03 | super.onCreate(savedInstanceState); |
04 | setContentView(R.layout.play); |
05 | Intent intent = this.getIntent(); |
06 | Bundle bundle = intent.getExtras(); |
07 | _ids = bundle.getIntArray("_ids"); //获得保存音乐文件_ID的数组 |
08 | position = bundle.getInt("position"); //获得应该播放的音乐的号数,既播放第几首 |
09 | //代码未完,见下面的代码 |
10 | } |
[代码] 初始化控件
1 | playtime = (TextView)findViewById(R.id.playtime); //显示已经播放的时间 |
2 | durationTime = (TextView)findViewById(R.id.duration); //显示歌曲总时间 |
3 | playBtn = (ImageButton)findViewById(R.id.playBtn); //开始播放、暂停播放按钮 |
4 | latestBtn = (ImageButton)findViewById(R.id.latestBtn); //播放上一首按钮 |
5 | nextButton = (ImageButton)findViewById(R.id.nextBtn); //播放下一首按钮 |
6 | forwardBtn = (ImageButton)findViewById(R.id.forwardBtn); //快进按钮 |
7 | rewindBtn = (ImageButton)findViewById(R.id.rewindBtn); //快退按钮 |
8 | seekbar = (SeekBar)findViewById(R.id.seekbar); //播放进度条 |
[代码] 定义各控件的回调函数
001 | playBtn.setOnClickListener(new View.OnClickListener() { //点击“播放、暂停”按钮时回调 |
002 | @Override |
003 | public void onClick(View v) { |
004 | if (mp.isPlaying()){ //如果正在播放则暂停 |
005 | pause(); |
006 | playBtn.setBackgroundResource( |
007 | R.drawable.play_selecor); //更改按键状态图标 |
008 | } else{ //如果没有播放则恢复播放 |
009 | play(); |
010 | playBtn.setBackgroundResource( |
011 | R.drawable.pause_selecor); //更改按键状态图标 |
012 | |
013 | } |
014 | } |
015 | }); |
016 | |
017 | latestBtn.setOnClickListener(new View.OnClickListener() {//点击“播放上一首”按钮时回调 |
018 | @Override |
019 | public void onClick(View v) { |
020 | int num = _ids.length; //获得音乐的数目 |
021 | if(position==0){ //如果已经时第一首则播放最后一首 |
022 | position=num-1; |
023 | }else{ //否则播放上一首 |
024 | position-=1; |
025 | } |
026 | int pos = _ids[position]; //得到将要播放的音乐的_ID |
027 | setup(); //做播放前的准备工作 |
028 | play(); //开始播放 |
029 | } |
030 | }); |
031 | |
032 | nextButton.setOnClickListener(new View.OnClickListener(){//点击“播放下一首”按钮时回调 |
033 | @Override |
034 | public void onClick(View v) { |
035 | int num = _ids.length; //获得音乐的数目 |
036 | if (position==num-1){ //如果已经是最后一首,则播放第一首 |
037 | position=0; |
038 | }else{ |
039 | position+=1; //否则播放下一首 |
040 | } |
041 | int pos = _ids[position]; //得到将要播放的音乐的_ID |
042 | setup(); //做播放前的准备工作 |
043 | play(); //开始播放 |
044 | } |
045 | }); |
046 | |
047 | forwardBtn.setOnTouchListener(new OnTouchListener() { //点击“快进”按钮时回调 |
048 | @Override |
049 | public boolean onTouch(View v, MotionEvent event) { |
050 | switch (event.getAction()) { |
051 | case MotionEvent.ACTION_DOWN: |
052 | fHandler.post(forward); //此处使用handler对象更新进度条 |
053 | mp.pause(); //点击快进按钮时,音乐暂停播放 |
054 | break; |
055 | |
056 | case MotionEvent.ACTION_UP: |
057 | fHandler.removeCallbacks(forward); |
058 | mp.start(); //松开快进按钮时,音乐暂恢复播放 |
059 | playBtn.setBackgroundResource( |
060 | R.drawable.pause_selecor); |
061 | break; |
062 | } |
063 | return false; |
064 | } |
065 | }); |
066 | |
067 | rewindBtn.setOnTouchListener(new OnTouchListener() { //点击“快退”按钮时回调 |
068 | @Override |
069 | public boolean onTouch(View v, MotionEvent event) { |
070 | switch (event.getAction()) { |
071 | case MotionEvent.ACTION_DOWN: |
072 | fHandler.post(rewind); |
073 | mp.pause(); //点击快退按钮时,音乐暂暂停播放 |
074 | break; |
075 | |
076 | case MotionEvent.ACTION_UP: |
077 | fHandler.removeCallbacks(rewind); |
078 | mp.start(); //松开快退按钮时,音乐暂恢复播放 |
079 | playBtn.setBackgroundResource( |
080 | R.drawable.pause_selecor); |
081 | break; |
082 | } |
083 | return false; |
084 | } |
085 | }); |
086 | |
087 | seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { |
088 | @Override |
089 | public void onStopTrackingTouch(SeekBar seekBar) { |
090 | mp.start(); //停止拖动进度条时,音乐开始播放 |
091 | } |
092 | @Override |
093 | public void onStartTrackingTouch(SeekBar seekBar) { |
094 | mp.pause(); //开始拖动进度条时,音乐暂停播放 |
095 | } |
096 | |
097 | @Override |
098 | public void onProgressChanged(SeekBar seekBar, int progress, |
099 | boolean fromUser) { |
100 | if(fromUser){ |
101 | mp.seekTo(progress); //当进度条的值改变时,音乐播放器从新的位置开始播放 |
102 | } |
103 | } |
104 | }); |
本文详细介绍了音乐播放器的开发流程,包括从上一个活动接收数据、初始化控件、定义回调函数等关键步骤。重点讨论了如何实现播放、暂停、上一首、下一首、快进、快退等功能,并通过代码片段展示了具体实现方法。
3811

被折叠的 条评论
为什么被折叠?



