在网上找了下别人搞的,作为菜鸟看到那些大神们写那么长的代码,我不知道怎么下手去弄,只能自己摸索着前进。其实真正的代码不多,很多都是我自己为了方便。
其实 mSeekBar.setEnabled(enabled)这个最直接
/**
* 禁止点击前进,和拖动前进进度条,在里面yon了OnSeekBarChangeListener这个监听了,外面再用效果就没了,所以只能自己写回调监听
*
* <p></p>
* 下午2:38:11
*
* @version 1.0.0
*/
public class BanSeekBar extends SeekBar {
/**
* 存放拖块的矩形
*/
private Rect mRect;
/**
* 记录当前进度值
*/
private int mProgressValue;
/**
* 禁止点击的时候有进度效果
*/
private boolean isBanClick=false;
/**
* 禁止拖动的时候yon进度效果
*/
private boolean isBanDrag=false;
public BanSeekBar(Context context) {
super(context);
}
public BanSeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setListener();
}
public BanSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
setListener();
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
mProgressValue = getProgress();
float x = ev.getX();
float y = ev.getY();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
if (isBanClick) {
return banAction(x, y);
}
break;
case MotionEvent.ACTION_MOVE:
if (isBanDrag) {
return banAction(x, y);
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return super.onTouchEvent(ev);
}
/**
* 核心代码,禁止所以动作,不能点击,不能拖动
* @param x
* @param y
* @return
*/
private boolean banAction(float x, float y) {
if (mRect != null) {
if (mRect.contains((int) (x), (int) (y))) {
return true;
} else {
return false;
}
} else {
return true;
}
}
/**
* 禁止点击的时候有进度效果
* @param isBanClick true为禁止,
*/
public void banClick(boolean isBanClick) {
this.isBanClick=isBanClick;
}
/**
* 获取点击禁止状态
*/
public boolean getBanClick() {
return isBanClick;
}
/**
* 禁止拖动的时候有进度效果
* @param isBanDrag true为禁止,
*/
public void banDrag(boolean isBanDrag) {
this.isBanDrag=isBanDrag;
}
/**
* 获取拖动禁止状态
*/
public boolean getBanDrag() {
return isBanDrag;
}
/**
* 设置监听器
*/
private void setListener() {
setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (isBanClick||isBanDrag) {
seekBar.setProgress(mProgressValue);
}
if (mBanSeekBarChangeListener!=null) {
mBanSeekBarChangeListener.onStopTrackingTouch(seekBar);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
if (mBanSeekBarChangeListener!=null) {
mBanSeekBarChangeListener.onStartTrackingTouch(seekBar);
}
}
@SuppressLint("NewApi")
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (isBanClick||isBanDrag) {
// 得到拖块图片
Drawable drawable = seekBar.getThumb();
// 得到放拖快图片的矩形。
mRect = drawable.getBounds();
}
if (mBanSeekBarChangeListener!=null) {
mBanSeekBarChangeListener.onProgressChanged(seekBar, progress, fromUser);
}
}
});
}
private OnBanSeekBarChangeListener mBanSeekBarChangeListener;
/**
* 设置监听
*/
public void setOnBanSeekBarChangeListener(OnBanSeekBarChangeListener banSeekBarChangeListener) {
mBanSeekBarChangeListener=banSeekBarChangeListener;
}
public interface OnBanSeekBarChangeListener{
/**
*
* @param seekBar
*/
void onStopTrackingTouch(SeekBar seekBar);
/**
*
* @param seekBar
*/
void onStartTrackingTouch(SeekBar seekBar);
/**
*
* @param seekBar
* @param progress
* @param fromUser
*/
void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser);
}
}
activity里面的用法是
public class MainActivity extends Activity {
private BanSeekBar mSeekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSeekBar=(BanSeekBar) findViewById(R.id.seekBar1);
mSeekBar.banClick(true);
mSeekBar.banDrag(true);
mSeekBar.setOnBanSeekBarChangeListener(new OnBanSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.d("myf", "3333333333333333");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.d("myf", "1111111111111111");
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
Log.d("myf", "=========="+progress);
}
});
}
}
布局文件不给了,这个你要是不会,我也不打算给了