Android 控制元件ProgressBar進度條
Android 控制元件---ProgressBar進度條
下面詳細介紹ProgressBar
一、說明
在某些操作的進度中的可視指示器,為使用者呈現操作的進度,視訊一般都有進度條,用來顯示中間進度,如在流媒體播放的緩衝區的進度。
二、常用屬性
style="?android:attr/progressBarStyle" 預設為圓形
style="?android:attr/progressBarStyleHorizontal" 水平樣式
android:max="100" 設定最大值
android:progress="33" 設定當前進度
三、重要方法
getMax():返回這個進度條的範圍的上限
getProgress():返回進度
getSecondaryProgress():返回次要進度
incrementProgressBy(int diff):指定增加的進度
isIndeterminate():指示進度條是否在不確定模式下
setIndeterminate(boolean indeterminate):設定不確定模式下
setVisibility(int v):設定該進度條是否可視
注意:1、給執行緒設定休眠會出現錯誤 Thread.sleep(100);//拋異常 SystemClock.sleep(100);//不會拋異常
2、不能在主執行緒中執行耗時的操作,只能在子執行緒中操作 ,
另外,在子執行緒中不能操作主執行緒中的控制元件 (ProgressBar除外)
四、重要事件
onSizeChanged(int w, int h, int oldw, int oldh):當進度值改變時引發此事件
五、例項
1.佈局檔案 (activity_main.xml程式碼)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="60dp">
<TextView
android:id="@+id/tv_main_tv1"
android:layout_width="60dp"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/pb_main_pb1"
android:layout_width="match_parent"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:layout_height="60dp" />
</FrameLayout>
<Button
android:id="@+id/btn_main_btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="setProcess"/>
</LinearLayout>
2、程式碼檔案(MainActivity.java程式碼)
package com.example.a0911_homework_05;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
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{//通過Handler給主執行緒傳送資訊
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(code == msg.what){
progress++;//每執行一遍就加1
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 setProgress(View view) {//點選就開始下載
if(0 == progress){//如果進度為0
new MyThread().start();//開始執行緒
}
}
private class MyThread extends Thread{//子執行緒
@Override
public void run() {//重寫執行緒
super.run();
while(true){
try {
Thread.sleep(100);//給執行緒設定睡眠時間0.1s
} catch (InterruptedException e) {
e.printStackTrace();
}
if(progress == 100){//如果進度為100就終止
progress = 0;//恢復預設值0
break;//結束終止
}
//觸發handleMessage方法
Message msg = new Message();
msg.what = 1;//給執行緒做標識
myHandler.sendMessage(msg);
}
}
}
}
3:執行緒小結 SubThread->MainThread 錯誤 SubThread->Handler->MainThread 正確
上面的為進度條,下面灰色條為按鈕,點選按鈕進度條就會執行