在滚动视图中使用搜索条发出问题

时间:2012-02-21 09:17:50

标签: android scrollview seekbar

我在滚动视图中有一个搜索栏。当某个人在滚动滑块更改时意外触摸滑块时。我只想在我拖动拇指时更改滑块值。任何人都可以帮我这个吗?

1 个答案:

答案 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的源代码并看到它总是很好地调用此方法来设置拇指可绘制 - 方便我们。 :)

触摸事件的处理基本上非常简单:只需测试触摸坐标是否在拇指可绘制的边界框内。显然,如果你有圆形拇指,你可以应用稍微不同的测试,但这个想法应该是清楚的。如果触摸事件不在拇指上,只需返回正在处理的事件,不要传播它。