在很多应用中都会使用到进度条组件,那么如何来控制进度条上的进度呢?当然,肯定会使用线程来控制他的进度。在这里,我们使用了任务线程的方式来控制,简单地模拟了进度的变化。
import com.review.review.R;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
/**
* 利用任务线程实现进度条刻度的问题
* @author Ad
*
*/
public class TestTaskActivity extends Activity implements OnClickListener{
/**
* 任务线程
* @author Ad
*泛型的参数类型是以下方法的参数类型
*/
public class MyTask extends AsyncTask<String,Integer,Boolean>{
/**
* 子线程运行的方法
* 参数:字符串类型的数组
*/
@Override
protected Boolean doInBackground(String... params) {
for(int i = 0;i <= 100;i++){
//调用主线程的方法
publishProgress(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;//泛型参数boolean的返回类型
}
/**
* 每次调用publishProgress时调用的方法
* 参数:整型类型的数组
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
Log.i("i", values[0]+"");
dialog.setProgress(values[0]);
}
/**
* 当doInBackground方法结束后调用的方法
* 布尔类型的数组
*/
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
dialog.setMessage("进度完成");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
dialog.setProgress(0);//把进度条清0
dialog.cancel();//取消进度对话框
}
}
private Button progressBtn;
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_task_main);
progressBtn = (Button) findViewById(R.id.test_task_main_btn_progress);
progressBtn.setOnClickListener(this);
}
@Override
protected Dialog onCreateDialog(int id) {
if(id == 0){
dialog = new ProgressDialog(this);
dialog.setMax(100);
dialog.setTitle("进度对话框");
dialog.setMessage("开始加载进度");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.show();
//启动任务
MyTask task = new MyTask();
task.execute(null);
}
return super.onCreateDialog(id);
}
@Override
public void onClick(View v) {
if(v == progressBtn){
showDialog(0);
}
}
}