使用Android写一个简单的音乐播放器界面,播放一首歌,并给出XML和Java代码要求:上方是会转到的圆盘,中间是进度条,下方是播放,暂停,继续播放,退出四个按钮 掌握MediaPlayer、Timer、TimerTask的使用方法。 掌握Handler消息机制
时间: 2023-10-24 09:04:27 浏览: 42
以下是一个简单的音乐播放器界面的XML和Java代码:
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/iv_disc"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:src="@drawable/disc" />
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/iv_disc"
android:layout_margin="16dp"
android:indeterminate="false"
android:max="100"
android:padding="4dp"
android:progress="0"
android:progressDrawable="@drawable/custom_progress_bar" />
<LinearLayout
android:id="@+id/buttons_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/progress_bar"
android:layout_marginTop="16dp"
android:gravity="center"
android:orientation="horizontal"
android:padding="16dp">
<Button
android:id="@+id/play_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/play_button_background"
android:text="Play"
android:textColor="@android:color/white" />
<Button
android:id="@+id/pause_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pause_button_background"
android:text="Pause"
android:textColor="@android:color/white"
android:visibility="gone" />
<Button
android:id="@+id/resume_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/play_button_background"
android:text="Resume"
android:textColor="@android:color/white"
android:visibility="gone" />
<Button
android:id="@+id/exit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/exit_button_background"
android:text="Exit"
android:textColor="@android:color/white" />
</LinearLayout>
</RelativeLayout>
```
Java代码:
```
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Timer;
import java.util.TimerTask;
public class MusicPlayerActivity extends AppCompatActivity {
private ImageView ivDisc;
private ProgressBar progressBar;
private Button playButton, pauseButton, resumeButton, exitButton;
private MediaPlayer mediaPlayer;
private Timer timer;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music_player);
ivDisc = findViewById(R.id.iv_disc);
progressBar = findViewById(R.id.progress_bar);
playButton = findViewById(R.id.play_button);
pauseButton = findViewById(R.id.pause_button);
resumeButton = findViewById(R.id.resume_button);
exitButton = findViewById(R.id.exit_button);
mediaPlayer = MediaPlayer.create(this, R.raw.song);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
playButton.setVisibility(View.VISIBLE);
pauseButton.setVisibility(View.GONE);
resumeButton.setVisibility(View.GONE);
progressBar.setProgress(0);
Toast.makeText(MusicPlayerActivity.this, "Music completed", Toast.LENGTH_SHORT).show();
}
});
timer = new Timer();
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
if (mediaPlayer != null) {
int currentPosition = mediaPlayer.getCurrentPosition();
int totalDuration = mediaPlayer.getDuration();
float progress = (float) currentPosition / (float) totalDuration * 100;
progressBar.setProgress((int) progress);
}
return true;
}
});
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
playButton.setVisibility(View.GONE);
pauseButton.setVisibility(View.VISIBLE);
resumeButton.setVisibility(View.GONE);
startTimer();
}
});
pauseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.pause();
playButton.setVisibility(View.GONE);
pauseButton.setVisibility(View.GONE);
resumeButton.setVisibility(View.VISIBLE);
stopTimer();
}
});
resumeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
playButton.setVisibility(View.GONE);
pauseButton.setVisibility(View.VISIBLE);
resumeButton.setVisibility(View.GONE);
startTimer();
}
});
exitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
stopTimer();
finish();
}
});
}
private void startTimer() {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0);
}
};
timer.schedule(timerTask, 0, 100);
}
private void stopTimer() {
timer.cancel();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
}
```
注意:以上代码仅供参考,需要自己根据实际需求进行修改和完善。