SeekBar介紹
聽歌的時候,我們常常想快進或者快退到某一時間段,聽歌的時候我們控制音量大小聽歌,SeekBar可以通過滑塊的位置來標示數值,
而且拖動條允許用戶拖動滑塊來改變進度條的大小
SeekBar的主要屬性和方法
(1)setMax --- 設置SeekBar的最大數值
(2)setProgress --- 設置SeekBar的當前數值
(3)setSecondProgress---設置SeekBar的第二數值
即當前拖動條的推薦位置
SeekBar的事件
由於拖動條可以誒用戶控制。所以需要對其事件監聽,這就需要實現SeekBar.OnSeekBarChangeListner接口,此接口共需監聽
三個事件分別是:
數值改變----onProgressChanged
開始拖動----onStartTrackingTouch
停止拖動----onStopTrackingTouch
1,布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/seekBar" android:max="100" android:progress="50"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/textView" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/textView2" /> </LinearLayout>
2,MainActivity
public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener{ private SeekBar seekBar; private TextView tv1; private TextView tv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); seekBar = (SeekBar)findViewById(R.id.seekBar); seekBar.setOnSeekBarChangeListener(this); tv1 = (TextView)findViewById(R.id.textView); tv2 = (TextView)findViewById(R.id.textView2); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { tv2.setText(progress+""); } @Override public void onStartTrackingTouch(SeekBar seekBar) { tv1.setText("開始拖動"); } @Override public void onStopTrackingTouch(SeekBar seekBar) { tv1.setText("停止拖動"); } }
自定義SeekBar的進度條
改變進度條的樣式
android:ProgressDrawable = “@drawable/seekBar_img”
改變滑塊的樣式
android:thumb = @drawable/thumb
3,改變滑塊的樣式
和ProgressBar 一樣,我們需要進入SeekBar 的樣式文件看一看
<style name="Widget.SeekBar"> <item name="android:indeterminateOnly">false</item> <item name="android:progressDrawable">@android:drawable/progress_horizontal</item> <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item> <item name="android:minHeight">20dip</item> <item name="android:maxHeight">20dip</item> <item name="android:thumb">@android:drawable/seek_thumb</item> <item name="android:thumbOffset">8dip</item> <item name="android:focusable">true</item> <item name="android:mirrorForRtl">true</item> </style>
我們可以看到他的滑塊是這個樣式@android:drawable/seek_thumb,繼續我們可以在\data\res\drawable下找到seek_thumb.xml這個文件,他就是滑塊的樣式
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:state_window_focused="true" android:drawable="@drawable/seek_thumb_pressed" /> <item android:state_focused="true" android:state_window_focused="true" android:drawable="@drawable/seek_thumb_selected" /> <item android:state_selected="true" android:state_window_focused="true" android:drawable="@drawable/seek_thumb_selected" /> <item android:drawable="@drawable/seek_thumb_normal" /> </selector>
可以看到他是一個選擇器,這樣,我們想要改變滑塊的樣式,只需要修改這個選擇器即可。
在drawable下放置兩種滑塊圖片
my_thumb.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/select" android:state_pressed="true" android:state_window_focused="true"/> <item android:drawable="@drawable/select" android:state_focused="true" android:state_window_focused="true"/> <item android:drawable="@drawable/select" android:state_selected="true" android:state_window_focused="true"/> <item android:drawable="@drawable/normal"/> </selector>
更改SeekBar的thumb屬性
<SeekBar android:thumb="@drawable/my_thumb" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/seekBar" android:max="100" android:progress="50"/>
就可以看到我們想要的滑塊效果了。