拖动条(SeekBar)和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则通过滑块的位置来标识数值----而且拖动条允许用户拖动滑动块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如音量调节。
SeekBar允许用户改变拖动条的滑块外观,改变滑块外观通过如下属性来指定
android:thumb 指定一个Drawable对象,该对象将作为自定义滑块。
为了让程序能响应拖动条滑块位置的改变,程序可以考虑为他绑定一个OnSeekBarChangerListener监听器。
通过一个实例:通过滑动块来改变图片的透明度,来看看SeekBar。
Layout/main.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <ImageView
8 android:id="@+id/image"
9 android:layout_width="fill_parent"
10 android:layout_height="240px"
11 android:src="@drawable/lijiang"
12 />
13 <!-- 定义一个拖动条,并改变它的滑块外观 -->
14 <SeekBar
15 android:id="@+id/seekbar"
16 android:layout_width="fill_parent"
17 android:layout_height="wrap_content"
18 android:max="255"
19 android:progress="255"
20 android:thumb="@drawable/ic_launcher"
21 />
22 </LinearLayout>
上面的界面布局代码中定义了两个组件:ImageView,SeekBar;SeekBar中thumb我使用了应用图标做了滑动块,下面我们看看主程序里面为滑动块添加的事件监听器
主程序:com.example.seekbar.SeekBarTest.java
1 package com.example.seekbar;
2
3 import android.support.v7.app.ActionBarActivity;
4 import android.support.v7.app.ActionBar;
5 import android.support.v4.app.Fragment;
6 import android.os.Bundle;
7 import android.view.LayoutInflater;
8 import android.view.Menu;
9 import android.view.MenuItem;
10 import android.view.View;
11 import android.view.ViewGroup;
12 import android.widget.ImageView;
13 import android.widget.SeekBar;
14 import android.widget.SeekBar.OnSeekBarChangeListener;
15 import android.os.Build;
16
17 public class SeekBarTest extends ActionBarActivity {
18
19 @Override
20 protected void onCreate(Bundle savedInstanceState) {
21 super.onCreate(savedInstanceState);
22 setContentView(R.layout.main);
23
24 final ImageView image = (ImageView)findViewById(R.id.image);
25 SeekBar seekBar = (SeekBar)findViewById(R.id.seekbar);
26
27 seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
28
29 @Override
30 public void onStopTrackingTouch(SeekBar seekBar) {
31 }
32
33 @Override
34 public void onStartTrackingTouch(SeekBar seekBar) {
35 }
36
37 //当拖动条的滑块位置发生改变时触发该方法
38 @Override
39 public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
40 image.setAlpha(arg1);
41 }
42 });
43 }
44 }
运行后的效果图:
拉动后滑动块后的效果: