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>
