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