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>