前言:
先解释这里的进度条的用处 , 当一个页面切换到另外一个页面, 需要从后台加载些载入页面所需的数据, 此时显示的 一个对话框或者进度条!
举个栗子:
当你打开一个web站点, 你能忍受 网页从上到下 一点一点, 要么冒出一点要么冒出一点这么感受嘛!!!
然而当你打开的另一个web站点, 该站点使用一个很友好的 进度条效果 ,我想这起码不会使用户对此感到太大的反感!

IProgress
public interface IProgress {
public boolean isAvailable();
public void startProgress();
public void finishProgress();
public void updateProgressMessage(CharSequence message);
public void updateProgress(Integer value);
public void setIndeterminate(boolean indeterminate);
}一个简单的进度条效果的实现类 SimpleDialogProgress,
public class SimpleDialogProgress implements IProgress {
private Context context = null;
private ProgressDialog progressDialog = null;
private CharSequence title = "";
private CharSequence message = "";
public SimpleDialogProgress(Context context) {
this.context = context;
this.message = context.getString(R.string.progress_operating);
}
public SimpleDialogProgress(Context context, CharSequence title) {
this.context = context;
this.title = title;
this.message = context.getString(R.string.progress_operating);
}
public SimpleDialogProgress(Context context, CharSequence title,
CharSequence message) {
this.context = context;
this.title = title;
this.message = message;
}
/*
* (non-Javadoc)
*
* @see com.ishow.beycare.task.IProgress#isAvailable()
*/
public boolean isAvailable() {
// TODO Auto-generated method stub
return progressDialog != null;
}
/*
* (non-Javadoc)
*
* @see com.ishow.beycare.task.IProgress#start(java.lang.CharSequence)
*/
public void startProgress() {
// TODO Auto-generated method stub
progressDialog = ProgressDialog.show(context, title, message, true,
false);
}
public void finishProgress() {
if (isAvailable()) {
progressDialog.dismiss();
}
}
/*
* (non-Javadoc)
*
* @see com.ishow.beycare.task.IProgress#updateMessage(java.lang.String)
*/
public void updateProgressMessage(CharSequence message) {
// TODO Auto-generated method stub
if (isAvailable()) {
progressDialog.setMessage(message);
}
}
/*
* (non-Javadoc)
*
* @see com.ishow.beycare.task.IProgress#updateProgress(java.lang.Integer)
*/
public void updateProgress(Integer value) {
// TODO Auto-generated method stub
if (isAvailable()) {
progressDialog.setProgress(value);
}
}
/*
* (non-Javadoc)
*
* @see com.ishow.beycare.task.IProgress#setIndeterminate(boolean)
*/
public void setIndeterminate(boolean indeterminate) {
// TODO Auto-generated method stub
if (isAvailable()) {
progressDialog.setIndeterminate(indeterminate);
}
}
}TaskHost
public class TaskHost {
public void onCancelled(int requestCode) {
}
public void onPostExecute(int requestCode, String result) {
}
public void onPreExecute(int requestCode) {
}
}BaseTask
public abstract class BaseTask extends AsyncTask<Void, Integer, String> {
protected IProgress progress;
protected TaskHost taskHost;
protected int requestCode;
public BaseTask(int requestCode) {
// TODO Auto-generated constructor stub
}
public IProgress getProgress() {
return progress;
}
public void setProgress(IProgress progress) {
this.progress = progress;
}
public TaskHost getTaskHost() {
return taskHost;
}
public void setTaskHost(TaskHost taskHost) {
this.taskHost = taskHost;
}
public int getRequestCode() {
return requestCode;
}
public void setRequestCode(int requestCode) {
this.requestCode = requestCode;
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// 调用了接口的相应的方法
if (progress != null) {
progress.startProgress();
progress.updateProgress(0);
}
if (taskHost != null) {
taskHost.onPreExecute(requestCode);
}
super.onPreExecute();
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (taskHost != null) {
taskHost.onPostExecute(requestCode, result);
}
if (progress != null) {
progress.updateProgress(100);
progress.finishProgress();
}
}
@Override
protected abstract String doInBackground(Void... params);
}ContextTask
public class ContextTask extends BaseTask{
public ContextTask(int requestCode) {
super(requestCode);
// TODO Auto-generated constructor stub
}
@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
String result = "该方法并不运行在UI线程当中,主要用于异步操作,所以在该方法中不能对UI当中的空间进行设置和修改 ";
return result;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
UI中调用
public class ListContainActivity extends Activity{
private TabHost tabHost ;
ContextTask contextTask ;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.showcontain);
contextTask = new ContextTask(0);
TaskHost taskHost = new TaskHost(){
@Override
public void onPreExecute(int requestCode) {
// TODO Auto-generated method stub
super.onPreExecute(requestCode);
}
};
contextTask.setTaskHost(taskHost);
contextTask.setProgress(new SimpleDialogProgress(this, "加载LIST", "正在加载中..."));
contextTask.execute();
}
本文介绍了一个用于Android应用的自定义进度条组件实现。通过提供一个简单易用的接口,开发者可以轻松地在页面加载过程中展示进度条,提高用户体验。文章详细展示了如何创建一个符合进度条接口规范的实现类,并将其集成到具体的任务执行流程中。

被折叠的 条评论
为什么被折叠?



