ProgressBar的常用屬性:style,進度條的樣式,默認為圓形,用style="?android:attr/progressBarStyleHorizontal"可以將進度條設為條狀;android:progress,進度條當前所處進度;android:max,進度條總進度。
用線程實現進度條的注意事項:不能在主線程中執行耗時的操作,只能在子線程中操作;另外,在子線程中不能操作主線程中的控件(ProgressBar除外):
修改后MainActivity.java里的代碼如下:
public class MainActivity extends AppCompatActivity { private int p=0;//當前進度 private ProgressBar pb_main_download;//進度條 private TextView tv_main_desc;//顯示文本的控件 private MyHandler myHandler=new MyHandler();//新寫的Handler類 public class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int code=msg.what;//接受處理碼 switch (code){ case 1: p++; pb_main_download.setProgress(p);//給進度條的當前進度賦值 tv_main_desc.setText(p+"%");//顯示當前進度為多少 break; } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //根據ID找到進度條 pb_main_download=findViewById(R.id.pb_main_download); //根據ID找到顯示文本的控件 tv_main_desc=findViewById(R.id.tv_main_desc); } //點擊Download按鈕所調用的方法 public void download(View view) { if(0==p){//如果當前進度為0 new myThread().start();//開啟線程 } } public class myThread extends Thread{ @Override public void run() { super.run(); while(true){ try { Thread.sleep(100);//使線程休眠0.1秒 } catch (InterruptedException e) { e.printStackTrace(); } if(p==100){//當前進度等於總進度時退出循環 p=0; break; } Message msg=new Message(); msg.what=1; myHandler.sendMessage(msg);//發送處理碼 } } } }
---------------------
作者:前路漫漫,兩手空空
來源:CSDN
原文:https://blog.csdn.net/weixin_42687829/article/details/82728791
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!