android的Progressbar怎么用
答案:2 悬赏:50
解决时间 2021-03-01 02:05
- 提问者网友:雨之落き
- 2021-02-28 15:46
android的Progressbar怎么用
最佳答案
- 二级知识专家网友:苦柚恕我颓废
- 2021-02-28 16:46
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); } }; }
全部回答
- 1楼网友:万千宠爱
- 2021-02-28 18:17
在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;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯