|
本篇文章是对Android中ProgressBar进度条和ProgressDialog进度框的展示DEMO进行了详细的分析介绍,需要的朋友参考下
在做手机开发时,经常碰到一些比较耗时的操作,这个时候进度条就开始派上用场了。 这个demo展示了ProgressBar进度条和ProgressDialog进度框。 一、ProgressDialog进度框,效果如图所示:
代码如下: 复制代码 代码如下: //进度条handle按钮监听 class ProssBarHandleButtonListener implements OnClickListener { @Override public void onClick(View v) { progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(1000); new Thread() { public void run() { for(int i=0;i<=1000;){ try { /* 在这里写上运行的进度条 */ Message msg = new Message(); msg.what = 1; msg.getData().putInt("size", i); handler.sendMessage(msg);//handle发送消息 /* 为了明显看见效果,以暂停1秒作为示范 */ sleep(100); i+=10; } catch (Exception e) { handler.obtainMessage(-1).sendToTarget(); e.printStackTrace(); } } } }.start(); /* 开始运行运行线程 */ } }
//handle接收消息 private Handler handler = new Handler(){
@Override public void handleMessage(Message msg) { switch (msg.what) { case 1: progressBarHandle.setProgress(msg.getData().getInt("size")); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); System.out.println("progressBarHandle.getProgress()======="+progressBarHandle.getProgress()); myProssBarhandleText.setText(result+ "%"); if(progressBarHandle.getProgress()==progressBarHandle.getMax()){ Toast.makeText(ProgressbarDemo.this, "下载成功", 1).show(); progressBarHandle.setVisibility(View.GONE); myProssBarhandleText.setVisibility(View.GONE); } break;
case -1: Toast.makeText(ProgressbarDemo.this,"下载失败", 1).show(); break; } } };
2、使用AsyncTask方法,效果图与handle效果一样 具体代码如下: 复制代码 代码如下: //进度条synctask按钮监听 class ProssBarSyncButtonListener implements OnClickListener { @Override public void onClick(View v) { new AsyncLoader().execute((Void)null); } }
//AsyncTask 任务执行 class AsyncLoader extends AsyncTask<Void, Integer, Integer> { @Override // 在doInBackground方法执行前执行 protected void onPreExecute(){ progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(100000); }
// 做具体的耗时操作 protected Integer doInBackground(Void... params) { //这里以1万的进度条刻度来显示 int totalSize = 100000; for (int i = 0; i < 100000; ) { publishProgress(i); //通过推送消息传递数据给onProgressUpdate方法执行 i+=10; } return totalSize; } // 在doInBackground方法执行过程中执行 protected void onProgressUpdate(Integer... progress) { progressBarHandle.setProgress(progress[0]); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); myProssBarhandleText.setText(result+ "%"); }
// 在doInBackground方法结束后执行 protected void onPostExecute(Integer result) { Toast.makeText(ProgressbarDemo.this, "下载成功,下载了"+result, 1).show(); myProssBarhandleText.setVisibility(View.GONE); progressBarHandle.setVisibility(View.GONE); } }
点击下载DEMO示例
|
|