14-1 使用SeekBar制作可拖動的進度條
SeekBar
通過滑塊的位置來標識數值,而且拖動條允許用戶拖動滑塊來改變進度值的大小。
主要屬性和方法
setMax()——設置SeekBar的最大數值
setProgress()——設置SeekBar當前的數值
setSecondaryProgress()——設置SeekBar的第二數值,即當前拖動推薦的數值
使用SeekBar制作可拖動的進度條
第一步 main.xml聲明SeekBar
第二步 MainActivity中聲明和初始化SeekBar
第三步 MainActivity中聲明和初始化TextView tv1 tv2
第四步 拖動的三種情況的設置
SeekBar的事件
SeekBar是ProgressBar的子類;SeekBar的特殊性在於,其進度由程序和用戶共同決定。SeekBar與ProgressBar最大的區別就是進度可以由用戶控制。所有需要實現拖動事件的監聽,監聽器接口是SeekBar.OnSeekBarChangeListener,三個接口方法是
onProgressChanged()——數值改變
onStartTracingTouch()——開始拖動
onStopTracingTouch()——停止拖動
--------------------------------------------------
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <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:id="@+id/seekBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" /> <TextView android:id="@+id/tv1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv2" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
MainActivity.java
package com.example.andriod2_seekbar; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.os.Build; public class MainActivity extends Activity implements 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); tv1=(TextView) findViewById(R.id.tv1); tv2=(TextView) findViewById(R.id.tv2); seekBar.setOnSeekBarChangeListener(this); } //數值改變 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub tv1.setText("正在拖動"); tv2.setText("當前數值:"+progress); } //開始拖動 @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub tv1.setText("開始拖動"); } //停止拖動 @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub tv1.setText("停止拖動"); } }
14-2 自定義SeekBar進度條
自定義SeekBar進度條樣式
android:progressDrawable="@android:drawable/seekbar_img"//改變進度條樣式
android:thumb="@android:drawable/thumb"//滑改變塊樣式
<SeekBar android:id="@+id/seekBar" style="@android:style/Widget.SeekBar"[Andriod自帶的,ctrl+左擊] android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" />
可得:
<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>[ctrl+左擊] <item name="android:thumbOffset">8dip</item> <item name="android:focusable">true</item> <item name="android:mirrorForRtl">true</item> </style>
E:\adt-bundle-windows-x86-20130917\platforms\android-14\data\res\drawable
找到文件打開可得:
@android:drawable/seek_thumb
<?xml version="1.0" encoding="utf-8"?> <!-- This is the thumb on the seek bar. --> <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>
所以改后:
<SeekBar android:id="@+id/seekBar" android:thumb="@drawable/my_thumb" style="@android:style/Widget.SeekBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" />
my_thumb.xml
<?xml version="1.0" encoding="utf-8"?> <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>