中易网

android的Progressbar怎么用

答案:2  悬赏:50  
解决时间 2021-03-01 02:05
android的Progressbar怎么用
最佳答案
Android提供的ProgressBar Widget控件与ProgressDialog应用目标不同,在程序一开始即可在main.xml Layout当中布局,先将部署在Layout里的ProgressBar的属性设为隐藏(一开始看不见),而后使用进程来“假装”程序忙碌中,但不同的是,可在进程当中取得运行时的进度,在“运行”的过程中,将运行进度通过TextView显示出来。本范例除了学习ProgressBar Widget的显示及使用之外,另一个学习关键则是Handler的使用,因为新起的进程无法访问Activity里的Widget,也无法将运行状态外送出来,所以需要通过Handler及Message对象,将进程里的状态往外传递,最后由Activity的Handler事件接收取得运行的状态。   范例程序   src/irdc.ex04_17/EX04_17.java   为了让Thread运行过程中,可以不断地将信息往Activity传递,所以用了Android.os.Handler对象及Android.os.Message对象,且在类成员变量中声明了两个整数:GUI_STOP_NOTIFIER与GUI_THREADING_NOTIFIER,这两个整数将作为信息传递出来时的信号标识,前者为当Thread需要喊停的时候处理,后者为进程正在运行过程中所需处理的标识。   程序中设计了一个按钮,此按钮的工作是让原本部署在main.xml里的ProgressBar显示出来(原来是设置为Android:visibility="gone"),而因为默认在main.xml中没有指定它的indeterm- inate属性,所以即便在程序中强制调用了ProgressBar的setIndeterminate()方法,也无法改变ProgressBar.getProgress()的值,这个值将永远为0。因此,笔者想要使用循环图片动画作为运行过程中的动画,并用了一个Counter(整数)来递增,表示运行的百分比。   复制代码 代码如下: public class EX04_17 extends Activity { private TextView mTextView01; private Button mButton01; private ProgressBar mProgressBar01; public int intCounter=0; protected static final int GUI_STOP_NOTIFIER = 0x108; protected static final int GUI_THREADING_NOTIFIER = 0x109; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton01 = (Button)findViewById(R.id.myButton1); mTextView01 = (TextView)findViewById(R.id.myTextView1); mProgressBar01 = (ProgressBar)findViewById(R.id.myProgressBar1); mProgressBar01.setIndeterminate(false); mButton01.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mTextView01.setText(R.string.str_progress_start); mProgressBar01.setVisibility(View.VISIBLE); mProgressBar01.setMax(100); mProgressBar01.setProgress(0); new Thread(new Runnable() { public void run() { for (int i=0;i<10;i++) { try { intCounter = (i+1)*20; Thread.sleep(1000); if(i==4) { Message m = new Message(); m.what = EX04_17.GUI_STOP_NOTIFIER; EX04_17.this.myMessageHandler.sendMessage(m); break; } else { Message m = new Message(); m.what = EX04_17.GUI_THREADING_NOTIFIER; EX04_17.this.myMessageHandler.sendMessage(m); } } catch(Exception e) { e.printStackTrace(); } } } }).start(); } }); } Handler myMessageHandler = new Handler() { // @Override public void handleMessage(Message msg) { switch (msg.what) { case EX04_17.GUI_STOP_NOTIFIER: mTextView01.setText(R.string.str_progress_done); mProgressBar01.setVisibility(View.GONE); Thread.currentThread().interrupt(); break; case EX04_17.GUI_THREADING_NOTIFIER: if(!Thread.currentThread().isInterrupted()) { mProgressBar01.setProgress(intCounter); mTextView01.setText ( getResources().getText(R.string.str_progress_start)+ "("+Integer.toString(intCounter)+"%)/n"+ "Progress:"+ Integer.toString(mProgressBar01.getProgress())+ "/n"+"Indeterminate:"+ Boolean.toString(mProgressBar01.isIndeterminate()) ); } break; } super.handleMessage(msg); } }; }
全部回答
在android中,progressbar可以用来提醒用户某个任务的进度。下面我们来模拟一个下载进度来看一下。 首先我们创建一个按钮来启动一个带有progressbar的提醒。 编写代码为按钮添加一个点击事件。 运行效果。 修改progressbar的风格。 完整的代码。  public void onclick(view v) {  // prepare for a progress bar dialog progressbar = new progressdialog(v.getcontext()); progressbar.setcancelable(true); progressbar.setmessage("file downloading ..."); progressbar.setprogressstyle(progressdialog.style_spinner); progressbar.setprogress(0); progressbar.setmax(100); progressbar.show(); //reset progress bar status progressbarstatus = 0; //reset filesize filesize = 0; new thread(new runnable() {  public void run() { while (progressbarstatus < 100) {  // process some tasks  progressbarstatus = dosometasks();  // your computer is too fast, sleep 1 second  try { thread.sleep(1000);  } catch (interruptedexception e) { e.printstacktrace();  }  // update the progress bar  progressbarhandler.post(new runnable() { public void run() {  progressbar.setprogress(progressbarstatus); }  }); } // ok, file is downloaded, if (progressbarstatus >= 100) { // sleep 2 seconds, so that you can see the 100% try { thread.sleep(2000); } catch (interruptedexception e) { e.printstacktrace(); } // close the progress bar dialog progressbar.dismiss(); }  }       }).start();           }                 });         } // file download simulator... a really simple public int dosometasks() { while (filesize <= 1000000) { filesize++; if (filesize == 100000) { return 10; } else if (filesize == 200000) { return 20; } else if (filesize == 300000) { return 30; } // ...add your own } return 100; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有一种狗叫宗狮还是松狮
有关哥哥和弟弟之间的动漫,,哥哥和照顾弟弟,
V8酒吧在什么地方啊,我要过去处理事情
我想学快计师
海尔自清洁空调真的好用吗?
坑啊!应聘的宝马4S店的配件管理专员,结果去
请问samsung(三星) HD321HJ (320G/7200rpm)
南海市中摩科技有限公司这个地址在什么地方,
本人一辆三轮车转让但不能过户 双方签订一份
有什么都市小说主角背景连国家都恐惧
铭门锁业我想知道这个在什么地方
合法居住证明是什么?
智商高体质差的人适合什么工作?
4个千,2个百,7个一组成的数写作()
只相信自己做的事,不相信别人做的事,有很大
推荐资讯
温之馨装饰涂料总汇这个地址在什么地方,我要
1997年农历十月,廿七,新历是几月几号
求高手修改成选股公式,选出出现海豚张嘴的K
把牛仔裤的颜色变淡
西宁公交集团有限责任公司一分公司国家电网电
销售和招投标哪个工作好
马蜂是什么样的,有图片吗
辣椒巴羊吃有什么好处
新概念龙虾馆我想知道这个在什么地方
青蓝农业开发有限公司我想知道这个在什么地方
苹果5和5s 可以互换什么件 能否拼到一起使用
为什么网上说的宇宙观都是机器宇宙观啊
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?