Android studio 進度條
阿新 • • 發佈:2018-11-15
在我們使用進度條 ProgressBar的時候
它的常用屬性為:
進度條預設為圓形 ,但是我們這裡使用是線型
style="?android:attr/progressBarStyleHorizontal"
android:progress=“33”
android:max=“100”
執行緒休眠
Thread.sleep(100);//拋異常
SystemClock.sleep(100);//不會拋異常
public class MainActivity extends AppCompatActivity { private ProgressBar pb_main_pb1; private int progress; private TextView tv_main_tv1; private MyHandler myHandler = new MyHandler(); private int code = 1; private class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(code == msg.what){ progress ++; pb_main_pb1.setProgress(progress); tv_main_tv1.setText(progress+"%"); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pb_main_pb1 = this.findViewById(R.id.pb_main_pb1); tv_main_tv1 = this.findViewById(R.id.tv_main_tv1); } public void studyToast(View view) { Toast.makeText(this, "hello Toast", Toast.LENGTH_LONG).show(); } public void setProgressBar(View view) { if(0 == progress){ new MyThread().start(); } } private class MyThread extends Thread{ @Override public void run() { super.run(); while (true){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } if(progress == 100){ progress =0; break; } Message msg = new Message(); msg.what = 1; myHandler.sendMessage(msg); } } } }
執行緒注意事項:
我們在操作 (ProgressBar除外) 控制元件時如果把控制元件放在子執行緒裡就會出問題,所以我們這裡通過MyHandler來處理這個問題。
我們在平常中下載資源時肯定不止是一個的,所以我們通過msg.what = (1,2,3,4…);來代表每一個程序,然後用MyHandler 來獲取它的值,然後經過if判斷來呼叫這個執行緒就行了,這裡為了簡單的訴說整個過程我採用的是if,你們可以用swith這樣會更好一點。
SubThread->MainThread 錯誤 SubThread->Handler->MainThread 正確