Проблема с использованием seekbar в представлении прокрутки - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть панель поиска в представлении прокрутки. Когда кто-то случайно касается ползунка во время смены ползунка прокрутки.Я хочу изменить значение слайдера, только когда я перетаскиваю большой палец.Кто-нибудь может мне помочь с этим?

1 Ответ

1 голос
/ 21 февраля 2012

Я не знаю ни одной встроенной опции, которая позволяла бы вам делать то, что вы ищете, но вы можете легко расширить реализацию 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 нет метода getThumb(), который возвращает рисованный объект, используемый для большого пальца, необходимо переопределить setTumb(...), чтобы отслеживать большой палецзадавать.Вы можете найти исходный код SeekBar и увидеть, что он всегда красиво вызывает этот метод, чтобы настроить рисование большого пальца - это удобно для нас.:)

Обработка событий касания в основном очень проста: просто проверьте, находятся ли координаты касания внутри ограничительной рамки рисованного большого пальца.Очевидно, что если у вас круговой большой палец, вы можете применить немного другой тест, но идея должна быть ясной.Если событие касания не было на большом пальце, просто верните его обработанным и не распространяйте его.

...