Android实现一个简单的具有音乐播放功能,能暂停和继续,能拖动进度条,能查看实时播放音乐列表的代码和布局文件
时间: 2024-03-10 09:44:26 浏览: 29
好的,以下是一个简单的实现音乐播放功能的 Android 应用的代码和布局文件。
首先是布局文件 `activity_main.xml`:
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/album_art"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:src="@drawable/album_art_placeholder" />
<TextView
android:id="@+id/song_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/album_art"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="Song Title"
android:textSize="24sp" />
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/song_title"
android:layout_marginTop="16dp"
android:max="100"
android:progress="0" />
<LinearLayout
android:id="@+id/controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/seek_bar"
android:layout_marginTop="16dp"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/play_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Play" />
<Button
android:id="@+id/pause_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pause"
android:visibility="gone" />
</LinearLayout>
<ListView
android:id="@+id/songs_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/controls"
android:layout_marginTop="16dp"
android:visibility="gone" />
</RelativeLayout>
```
接下来是 MainActivity.java 中的代码:
```java
public class MainActivity extends AppCompatActivity {
private ImageView albumArt;
private TextView songTitle;
private SeekBar seekBar;
private Button playButton;
private Button pauseButton;
private ListView songsList;
private MediaPlayer mediaPlayer;
private ArrayAdapter<String> adapter;
private boolean isPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化 UI 组件
albumArt = findViewById(R.id.album_art);
songTitle = findViewById(R.id.song_title);
seekBar = findViewById(R.id.seek_bar);
playButton = findViewById(R.id.play_button);
pauseButton = findViewById(R.id.pause_button);
songsList = findViewById(R.id.songs_list);
// 设置播放列表
List<String> songs = new ArrayList<>();
songs.add("Song 1");
songs.add("Song 2");
songs.add("Song 3");
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, songs);
songsList.setAdapter(adapter);
// 设置播放器
mediaPlayer = MediaPlayer.create(this, R.raw.song_1);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播放完毕后自动暂停
pause();
}
});
// 设置播放按钮的点击事件
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
play();
}
});
// 设置暂停按钮的点击事件
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pause();
}
});
// 设置进度条的拖动事件
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mediaPlayer.seekTo(progress * mediaPlayer.getDuration() / 100);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
// 设置歌曲列表的点击事件
songsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 停止当前播放的歌曲
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
// 加载新的歌曲
switch (position) {
case 0:
mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.song_1);
break;
case 1:
mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.song_2);
break;
case 2:
mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.song_3);
break;
}
// 播放新的歌曲
play();
}
});
}
private void play() {
if (!isPlaying) {
mediaPlayer.start();
isPlaying = true;
playButton.setVisibility(View.GONE);
pauseButton.setVisibility(View.VISIBLE);
songsList.setVisibility(View.GONE);
}
}
private void pause() {
if (isPlaying) {
mediaPlayer.pause();
isPlaying = false;
playButton.setVisibility(View.VISIBLE);
pauseButton.setVisibility(View.GONE);
songsList.setVisibility(View.VISIBLE);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.release();
}
}
```
以上代码实现了基本的音乐播放功能,包括播放、暂停、拖动进度条、切换歌曲等,同时还有一个实时播放列表。不过需要注意的是,这只是一个简单的示例,实际开发中还需要考虑更多的情况,例如处理异常、释放资源等。