音乐播放器的进度条提示-ProgressBar,构建一个小程序,点击按钮后,出现进度条。
首先构建按钮布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="确定"
android:onClick="click"/>
</RelativeLayout>
点击确定按钮,进度条缓慢加载,下面给出主程序。
package com.example.progressbar;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
//** 进度条,showDialog调用createDialog()和onPrepareDialog(),createDialog()方法调用onCreateDialog();
public class MainActivity extends Activity {
private final int PROGRESS_DIALOG = 0;
private final int INCREASE = 0;
private ProgressDialog pd;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
showDialog(PROGRESS_DIALOG);
handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case INCREASE:
if(pd.getProgress()<100){
pd.incrementProgressBy(1);
}
break;
}
};
};
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case PROGRESS_DIALOG:
pd = new ProgressDialog(this);
pd.setMax(100);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setTitle("音乐播放器");
pd.setCancelable(false);
pd.show();
break;
}
return pd;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
switch (id) {
case PROGRESS_DIALOG:
new Thread(){
@Override
public void run() {
while(true){
handler.sendEmptyMessage(INCREASE);
if(pd.getProgress()>=100){
pd.dismiss();
break;
}
try {
Thread.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
break;
}
}
}
点击按钮,调用showDialog(int id)方法,showDialog()方法内部会执行createDialog(id, null, args),同时执行onPrepareDialog()方法,createDialog()方法调用onCreateDialog(int id)在onPrepareDialog()方法中启动了一个工作线程,模拟加载,每增1时线程睡眠0.04秒,在主线程中接收消息实现进度条的增长。在onCreateDialog(int id)方法中实现进度条的初始化。