Android实现一个简单的具有音乐播放功能,能暂停和继续,能拖动进度条,能查看播放音乐列表的代码和布局文件
时间: 2024-03-09 17:51:38 浏览: 170
一个简易音乐播放器(android)
以下是一个简单的 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">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Music Player"
android:layout_marginTop="16dp"
android:textSize="24sp"
android:textStyle="bold"
android:layout_centerHorizontal="true"/>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title"
android:layout_marginTop="16dp"/>
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/list_view"
android:layout_marginTop="16dp"/>
<LinearLayout
android:id="@+id/buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seek_bar"
android:layout_centerHorizontal="true">
<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"/>
</LinearLayout>
</RelativeLayout>
```
代码文件 `MainActivity.java`:
```java
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private ListView listView;
private SeekBar seekBar;
private Button playButton;
private Button pauseButton;
private TextView nowPlaying;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化 UI 控件
listView = findViewById(R.id.list_view);
seekBar = findViewById(R.id.seek_bar);
playButton = findViewById(R.id.play_button);
pauseButton = findViewById(R.id.pause_button);
nowPlaying = findViewById(R.id.title);
// 创建音乐播放器对象
mediaPlayer = new MediaPlayer();
// 设置音乐播放完成后的监听器
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// 播放完成后,重置播放器
mediaPlayer.reset();
nowPlaying.setText("Music Player");
}
});
// 绑定播放按钮的点击事件
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 如果播放器已经在播放,则不执行任何操作
if (mediaPlayer.isPlaying()) {
return;
}
// 开始播放
mediaPlayer.start();
nowPlaying.setText("Now Playing: " + listView.getSelectedItem().toString());
}
});
// 绑定暂停按钮的点击事件
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 如果播放器已经暂停,则不执行任何操作
if (!mediaPlayer.isPlaying()) {
return;
}
// 暂停播放
mediaPlayer.pause();
}
});
// 绑定进度条的拖动事件
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 如果用户拖动进度条,则更新播放器的进度
if (fromUser) {
mediaPlayer.seekTo(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
// 加载音乐列表
String[] musicList = {"music1.mp3", "music2.mp3", "music3.mp3"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, musicList);
listView.setAdapter(adapter);
// 绑定音乐列表的点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 如果播放器正在播放,则先停止播放
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
// 加载选择的音乐并开始播放
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(MainActivity.this, R.raw.music1);
mediaPlayer.prepare();
mediaPlayer.start();
nowPlaying.setText("Now Playing: " + listView.getItemAtPosition(position).toString());
} catch (IOException e) {
e.printStackTrace();
}
// 更新进度条的最大值和当前值
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setProgress(0);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 释放播放器资源
mediaPlayer.release();
mediaPlayer = null;
}
}
```
这个应用程序中,音乐列表是一个简单的字符串数组,可以根据实际需求进行更改。在 `onCreate()` 方法中,我们初始化了 UI 控件并创建了一个音乐播放器对象。我们还绑定了播放按钮、暂停按钮和进度条的点击事件,以及音乐列表的点击事件。当用户点击音乐列表中的某一项时,我们会加载该音乐并开始播放,并更新进度条的最大值和当前值。当音乐播放完成后,我们会重置播放器并更新标题。最后,在 `onDestroy()` 方法中,我们释放了播放器资源。
阅读全文