继承关系:
public class ProgressBar extends View {...}
public abstract class AbsSeekBar extends ProgressBar {...}
public class SeekBar extends AbsSeekBar {...}
Android系统提供了一个监听接口
SeekBar.OnSeekBarChangeListener
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.e(TAG, "onProgressChanged: 当前进度=================" + progress);
Log.e(TAG, "onProgressChanged: =====" + (fromUser ? "用户手动滑动" : "数据直接设置"));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.e(TAG, "onStartTrackingTouch: =================用户拖动开始");
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.e(TAG, "onStopTrackingTouch: =================用户拖动结束");
}
});
,要实现其监听功能只要实现其接口即可。在SeekBar中我们需要监听的主要有如下三个事件
- 数值的改变(onProgressChanged).
- 开始拖动(onStartTrackingTouch).
- 停止拖动(onStopTrackingTouch).
属性介绍:
android:max //设置值的大小 .
android:thumb="@drawable/" //显示的那个可拖动图标,如果没有设置该参数则为系统默认,如果自己需要重新定义,
//则将自己需要的图标存放在资源目录 /res/drawable下,然后调用即可.
android:thumbOffset //拖动图标的偏量值,可以让拖动图标超过bar的长度.
android:progress //设置seekbar当前的默认值,范围0到max之间.
android:secondaryProgress //用过的迅雷的都知道拖动图标随着当前的播放时间的走动而走动,
//同时我们也注意到了也有个缓冲看到的进度条,这个属性就是用来设置默认显示的值为多少,
//范围为0到max.
android:progressDrawable //当我们不想使用系统默认的SeekBar时可以自己定义一个,
//这个资源文件就是用来调用我们自己定义的Seekbar图标的一般是在drawable下建立一个.xml文件s用layer-list来组织这些图标.
例子如下:
package com.example.administrator.myseekbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.TextView;
/*
* 拖动条类似进度条,不同的是拖动条用户可以控制
* */
public class MainActivity extends AppCompatActivity implements
SeekBar.OnSeekBarChangeListener {
//声明SeekBar 和 TextView对象
private SeekBar mSeekBar;
private TextView mProgressText;
private TextView mTrackingText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//取得SeekBar对象
mSeekBar = (SeekBar) findViewById(R.id.seek);
mSeekBar.setOnSeekBarChangeListener(this);//设置监听器
mProgressText = (TextView) findViewById(R.id.progress);
mTrackingText = (TextView) findViewById(R.id.tracking);
}
//在拖动中--即值在改变
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
//progress为当前数值的大小
mProgressText.setText("当前值:" + progress);
}
//在拖动中会调用此方法
@Override
public void onStartTrackingTouch(SeekBar bar) {
mTrackingText.setText("xh正在调节");
}
//停止拖动
@Override
public void onStopTrackingTouch(SeekBar bar) {
mTrackingText.setText("xh停止调节");
}
}
XML布局文件:
<SeekBar
android:id="@+id/seek"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="50"
android:thumb="@mipmap/ic_launcher"
android:thumbOffset="20dip"
android:secondaryProgress="75"/>
参考: