用android写一个音乐播放器,包括xml和java文件
时间: 2024-01-21 10:17:18 浏览: 29
以下是一个简单的 Android 音乐播放器的 XML 和 Java 文件示例:
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">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomLayout" />
<LinearLayout
android:id="@+id/bottomLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#FFFFFF"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/prevButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/prev" />
<ImageView
android:id="@+id/playButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play" />
<ImageView
android:id="@+id/nextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/next" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/timeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0:00/0:00" />
</LinearLayout>
</RelativeLayout>
```
MainActivity.java:
```java
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ImageView prevButton;
private ImageView playButton;
private ImageView nextButton;
private SeekBar seekBar;
private TextView timeTextView;
private MediaPlayer mediaPlayer;
private Handler handler = new Handler();
private ArrayList<String> songsList = new ArrayList<>();
private int currentIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize views
listView = findViewById(R.id.listView);
prevButton = findViewById(R.id.prevButton);
playButton = findViewById(R.id.playButton);
nextButton = findViewById(R.id.nextButton);
seekBar = findViewById(R.id.seekBar);
timeTextView = findViewById(R.id.timeTextView);
// Add some songs to the list
songsList.add("song1.mp3");
songsList.add("song2.mp3");
songsList.add("song3.mp3");
// Set up the media player
mediaPlayer = MediaPlayer.create(this, R.raw.song1);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
playNextSong();
}
});
// Set up the seek bar
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mediaPlayer.seekTo(progress);
}
updateTimeTextView();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
// Set up the list view
SongAdapter songAdapter = new SongAdapter(this, songsList);
listView.setAdapter(songAdapter);
// Set up the play button
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
playButton.setImageResource(R.drawable.play);
} else {
mediaPlayer.start();
playButton.setImageResource(R.drawable.pause);
handler.postDelayed(updateSeekBarRunnable, 0);
}
}
});
// Set up the previous button
prevButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
playPreviousSong();
}
});
// Set up the next button
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
playNextSong();
}
});
}
private void playNextSong() {
currentIndex++;
if (currentIndex >= songsList.size()) {
currentIndex = 0;
}
playSongAtIndex(currentIndex);
}
private void playPreviousSong() {
currentIndex--;
if (currentIndex < 0) {
currentIndex = songsList.size() - 1;
}
playSongAtIndex(currentIndex);
}
private void playSongAtIndex(int index) {
mediaPlayer.reset();
int resourceId = getResources().getIdentifier(songsList.get(index), "raw", getPackageName());
mediaPlayer = MediaPlayer.create(this, resourceId);
mediaPlayer.start();
playButton.setImageResource(R.drawable.pause);
seekBar.setMax(mediaPlayer.getDuration());
handler.postDelayed(updateSeekBarRunnable, 0);
}
private Runnable updateSeekBarRunnable = new Runnable() {
@Override
public void run() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
updateTimeTextView();
handler.postDelayed(this, 100);
}
};
private void updateTimeTextView() {
long minutes = TimeUnit.MILLISECONDS.toMinutes(mediaPlayer.getCurrentPosition());
long seconds = TimeUnit.MILLISECONDS.toSeconds(mediaPlayer.getCurrentPosition()) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(mediaPlayer.getCurrentPosition()));
String currentTimeString = String.format("%d:%02d", minutes, seconds);
minutes = TimeUnit.MILLISECONDS.toMinutes(mediaPlayer.getDuration());
seconds = TimeUnit.MILLISECONDS.toSeconds(mediaPlayer.getDuration()) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(mediaPlayer.getDuration()));
String durationString = String.format("%d:%02d", minutes, seconds);
timeTextView.setText(currentTimeString + "/" + durationString);
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
mediaPlayer.release();
}
}
```
这个示例包括一个简单的界面,一个播放列表,播放、暂停、上一首、下一首和进度条控件,以及如何使用 MediaPlayer 控件播放音乐。注意,这只是一个简单的示例,可以根据自己的需求进行修改和扩展。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)