Chendd's Blog

世界上没有什么事情是一行代码不能解决的。如果有,那就两行。

Android学习日记3--常用控件progressbar/seekbar

常用控件

5、progressbar

       进度条,比较常用的组件,在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。一般有圆形和条形两种;

默认进度条是圆形的 小圆型进度条:

1
style="?android:attr/progressBarStyleSmall"

大圆形进度条:

1
style="?android:attr/progressBarStyleLarge"

条形进度条:

1
style="?android:attr/progressBarStyleHorizontal"
1
2
3
android:max="100" --最大值
android:progress="50" --初始值
android:secondaryProgress="60" --次进度条值

常用方法:

  • getMax():返回这个进度条的范围的上限
  • getProgress():返回进度
  • getSecondaryProgress():返回次要进度
  • incrementProgressBy(int diff):指定增加的进度
  • isIndeterminate():指示进度条是否在不确定模式下
  • setVisibility(int v):设置该进度条是否可视
  • onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件

简单小例子:

新开个线程,让条形进度条从最小增到最大,再减到最小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class MainActivity extends Activity implements Runnable{

    private Thread td;
    private ProgressBar pb;
    private boolean stateChange;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pb = (ProgressBar)findViewById(R.id.pd);
        td = new Thread(this);

        td.start();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true) {
            int current = pb.getProgress();
            int max = pb.getMax();
            int securrent = pb.getSecondaryProgress();

            if (stateChange == false) {
                if(current >= max) {
                    stateChange = true;
                }else {
                    pb.setProgress(current+1);
                    pb.setSecondaryProgress(current+1);
                }
            }else {
                if(current <= 0) {
                    stateChange = false;
                }else {
                    pb.setProgress(current-1);
                    pb.setSecondaryProgress(current-1);
                }
            }

            try {
                td.sleep(50);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

image

6、seekBar

  拖动条,见到的较多,如地图上,放大缩小,音乐播放时声音的放大缩小等

监听事件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
tv.setText("拖动完成...");
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
tv.setText("拖动中...");
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
tv.setText("当前拖动条值为:"+progress);
}

image

类似长型的进度条,只是可以手动拖到,也有

1
2
3
android:max="100" --最大值
android:progress="50" --初始值
android:secondaryProgress="60" --次进度条值

关于滑块还有一种较常用的是RatingBar,星级滑块,一般用于评定等级。

image

用法和上面大同小异,不再多说。

Comments