我在滚动视图中有一个搜索栏。当某个人在滚动滑块更改时意外触摸滑块时。我只想在我拖动拇指时更改滑块值。任何人都可以帮我这个吗?
答案 0 :(得分:1)
我不知道任何内置选项允许您执行您正在寻找的内容,但您可以轻松扩展默认的SeekBar实现并覆盖触摸事件的处理。基本实现看起来有点像这样:
public class ThumbOnlySeekBar extends SeekBar {
private Drawable mThumb;
public ThumbOnlySeekBar(Context context) {
super(context);
}
public ThumbOnlySeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ThumbOnlySeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override public void setThumb(Drawable thumb) {
super.setThumb(thumb);
mThumb = thumb;
}
@Override public boolean onTouchEvent(MotionEvent event) {
if (!mThumb.getBounds().contains((int)event.getX(), (int)event.getY())) return true;
return super.onTouchEvent(event);
}
}
由于SeekBar没有返回用于拇指的drawable的getThumb()
方法,因此必须覆盖setTumb(...)
以跟踪拇指集。您可以查找SeekBar的源代码并看到它总是很好地调用此方法来设置拇指可绘制 - 方便我们。 :)
触摸事件的处理基本上非常简单:只需测试触摸坐标是否在拇指可绘制的边界框内。显然,如果你有圆形拇指,你可以应用稍微不同的测试,但这个想法应该是清楚的。如果触摸事件不在拇指上,只需返回正在处理的事件,不要传播它。