首页 > 代码库 > Android 自学之拖动条SeekBar

Android 自学之拖动条SeekBar

拖动条(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 }

运行后的效果图:

拉动后滑动块后的效果: