SeekBar介紹
聽歌的時候,我們常常喜歡快進或者退回到某一時間段、喜歡控制音量大小。SeekBar可以通過滑塊的位置來標識數值,而且拖動條允許用戶拖動滑塊來改變進度值的大小。
--------------------
SeekBar的主要屬性和方法:
由於 SeekBar 是 PrograssBar 的子類,所以方法和屬性也是類似的。
(1)setMax ——設置SeekBar的最大數值
(2)setProgress ——設置SeekBar當前的數值
(3)setSecondaryProgress——設置SeekBar的第二數值,即當前拖動條推薦的數值。
-----------------------
SeekBar的事件
由於拖動條可以被用戶控制,所以需要對其進行事件監聽,這就需要實現 SeekBar.OnSeekBarChangeListener接口。此接口共需要監聽三個事件:
數值改變 onProgressChanged
開始拖動 onStartTrackingTouch
停止拖動 onStopTrackingTouch
使用SeekBar制作可拖動的進度條的步驟:
1. 在main.xml中添加標簽 SeekBar 和兩個 TextView用於顯示狀態。
2. 在MainActivity中創建並初始化SeekBsr和TextView.
3. 為了監聽用戶的手勢,需要監聽器,令 MainActivity 實現接口 OnSeekBarChangeListener,並重寫3個方法:
//數值改變的時候調用
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
textView1.setText("正在拖動");
textView2.setText("當前進度:"+progress);
}
//開始拖動的時候調用
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
textView1.setText("開始拖動");
}
//停止拖動的時候調用
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
textView1.setText("停止拖動");
}
4. SeekBar加載監聽器。
自定義SeekBar進度條
SeekBar類似之前學的ProgressBar,都可以改變進度條的樣式,但SeekBar還能改變滑塊的樣式。
android:progressDrawable="@drawable/seekbar_img"(改變進度條的樣式)
android:thumb="@drawable/thumb"(改變滑塊的樣式)
自定義滑塊樣式的步驟:
1. 在 drawale文件夾中創建資源文件 normal.png、select.png 作為滑塊的模型;
2. 在 drawale文件夾中創建選擇器selector資源文件 my_thumb.xml,在selector中添加代碼:
<!--按壓的情況下-->
<item android:drawable="@drawable/select" android:state_pressed="true" android:state_window_focused="true"></item>
<!--獲取到焦點的情況下-->
<item android:drawable="@drawable/select" android:state_focused="true" android:state_window_focused="true"></item>
<!--被選中的情況下-->
<item android:drawable="@drawable/select" android:state_selected="true" android:state_window_focused="true"></item>
<!--無操作的情況下-->
<item android:drawable="@drawable/normal"></item>
3. 在 main.xml 下的 SeekBar 添加屬性:
android:thumb="@drawable/my_thumb"。
-------------------------
自定義進度條樣式的步驟:
和前面學的 ProgressBar 完全一樣。
添加完需要的資源文件后,在 SeekBar中添加屬性:android:progressDrawable="@drawable/progress_bar"
1 //可拖動的進度條,它的監聽事件:OnSeekBarChangeListener
2 //自定義進度條滑塊樣式————在drawable文件夾下
3 public class MainActivity extends Activity implements OnSeekBarChangeListener {
4 private SeekBar seekBar;
5 private TextView textView, textView2;
6
7 @Override
8 protected void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.main);
11 seekBar = (SeekBar) findViewById(R.id.seekbar);
12 textView = (TextView) findViewById(R.id.text1);
13 textView2 = (TextView) findViewById(R.id.text2);
14 seekBar.setOnSeekBarChangeListener(this);
15
16 }
17
18 // 數值改變
19 @Override
20 public void onProgressChanged(SeekBar seekBar, int progress,
21 boolean fromUser) {
22 // TODO Auto-generated method stub
23 textView.setText("正在拖動");
24 textView2.setText("當前數值:" + progress);
25
26 }
27
28 // 開始拖動
29 @Override
30 public void onStartTrackingTouch(SeekBar seekBar) {
31 // TODO Auto-generated method stub
32 textView.setText("開始拖動");
33 }
34
35 // 停止拖動
36 @Override
37 public void onStopTrackingTouch(SeekBar seekBar) {
38 // TODO Auto-generated method stub
39 textView.setText("停止拖動");
40 }
41
42 }
----自定義滑塊的選擇器------
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/yes" android:state_pressed="true" android:state_window_focused="true"></item>
<item android:drawable="@drawable/yes" android:state_focused="true" android:state_window_focused="true"></item>
<item android:drawable="@drawable/yes" android:state_selected="true" android:state_window_focused="true"></item>
<item android:drawable="@drawable/no" ></item>
</selector>
