使用Android写一个简单的音乐播放器界面,播放一首歌,并给出XML和Java代码要求:上方是会转到的圆盘,中间是进度条,下方是播放,暂停,继续播放,退出四个按钮 掌握MediaPlayer、Timer、TimerTask的使用方法。 掌握Handler消息机制
时间: 2023-10-19 08:05:10 浏览: 59
以下是一个简单的音乐播放器界面的XML和Java代码,实现了上方的圆盘、中间的进度条,下方的播放、暂停、继续播放、退出四个按钮,并使用了MediaPlayer、Timer、TimerTask和Handler消息机制来实现播放功能。
XML代码:
```
<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_marginTop="20dp"
android:max="100"
android:progress="0" />
<LinearLayout
android:id="@+id/ll_control"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/progress_bar"
android:layout_marginTop="20dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<Button
android:id="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放" />
<Button
android:id="@+id/btn_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="暂停"
android:visibility="gone" />
<Button
android:id="@+id/btn_resume"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="继续播放"
android:visibility="gone" />
<Button
android:id="@+id/btn_exit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="退出" />
</LinearLayout>
</RelativeLayout>
```
Java代码:
```
public class MainActivity extends AppCompatActivity {
private ImageView ivDisc;
private ProgressBar progressBar;
private Button btnPlay, btnPause, btnResume, btnExit;
private MediaPlayer mediaPlayer;
private Timer timer;
private TimerTask timerTask;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivDisc = findViewById(R.id.iv_disc);
progressBar = findViewById(R.id.progress_bar);
btnPlay = findViewById(R.id.btn_play);
btnPause = findViewById(R.id.btn_pause);
btnResume = findViewById(R.id.btn_resume);
btnExit = findViewById(R.id.btn_exit);
mediaPlayer = MediaPlayer.create(this, R.raw.song);
mediaPlayer.setLooping(true);
handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
int progress = mediaPlayer.getCurrentPosition() * 100 / mediaPlayer.getDuration();
progressBar.setProgress(progress);
}
return true;
}
});
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
ivDisc.animate().rotationBy(360).setDuration(10000).setInterpolator(new LinearInterpolator()).start();
btnPlay.setVisibility(View.GONE);
btnPause.setVisibility(View.VISIBLE);
startTimer();
}
});
btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.pause();
ivDisc.animate().cancel();
btnPause.setVisibility(View.GONE);
btnResume.setVisibility(View.VISIBLE);
stopTimer();
}
});
btnResume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.start();
ivDisc.animate().rotationBy(360).setDuration(10000).setInterpolator(new LinearInterpolator()).start();
btnResume.setVisibility(View.GONE);
btnPause.setVisibility(View.VISIBLE);
startTimer();
}
});
btnExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
finish();
}
});
}
private void startTimer() {
if (timer == null) {
timer = new Timer();
}
if (timerTask == null) {
timerTask = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0);
}
};
}
timer.schedule(timerTask, 0, 500);
}
private void stopTimer() {
if (timer != null) {
timer.cancel();
timer = null;
}
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
stopTimer();
}
}
```
在上面的代码中,我们首先定义了一些控件和变量,然后在onCreate()方法中初始化了这些控件和变量,并设置了MediaPlayer对象的相关属性。我们还创建了一个Handler对象来更新进度条的进度。
在按钮的点击事件中,我们分别实现了播放、暂停、继续播放和退出四个功能。在播放时,我们使用了ObjectAnimator动画来实现圆盘的旋转,并启动了一个定时器来更新进度条的进度。在暂停和继续播放时,我们分别暂停和恢复了音乐的播放,并停止或重新启动了定时器。在退出时,我们停止了音乐的播放和定时器,并释放了MediaPlayer对象。
在这个例子中,我们已经掌握了MediaPlayer、Timer、TimerTask和Handler消息机制的使用方法,并成功的实现了一个简单的音乐播放器界面。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)