Android панель поиска, как заблокировать перетаскивание / отключить его на короткое время - PullRequest
15 голосов
/ 15 января 2012

Я хочу заблокировать перетаскивание панели поиска, если значение равно true. Это вообще возможно? Я использую панель поиска в качестве переключателя. Если значение моей панели поиска равно 0, и я нажимаю кнопку, то начинается действие А. Если значение моей панели поиска равно 1, и я нажимаю кнопку, начинается действие B.
Я хочу предотвратить это. Если выполняется действие A или B, панель поиска перемещается в другое положение.

Как мне этого добиться?

Ответы [ 4 ]

62 голосов
/ 26 апреля 2013

Вы должны установить свой собственный onTouchListener и просто вернуть true.

seekBar.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                return true;
            }
        });
6 голосов
/ 15 января 2012

Вы пытались отключить просмотр?

Ссылка: http://developer.android.com/reference/android/view/View.html#setEnabled(boolean)

Обновление:

https://stackoverflow.com/a/3278616/529691

В идеале вы не должны делать это , так как это может сбить пользователя с толку.Мое предложение переосмыслить ваш подход.

1 голос
/ 10 декабря 2016

Установите одну переменную уровня класса

private boolean blockSeekBar = false;

после этого установите переменную blockSeekBar согласно вашему требованию и используйте в приложении.

seekBar.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            return blockSeekbar;
        }
    });

setEnabled (true / false) тоже выбор, но там вид не очень хороший, поэтому вышеприведенный код отлично работает.

0 голосов
/ 18 июля 2019
int lastProgress=0;
  1. Отслеживание последнего прогресса при запуске Seekbar.OnSeekbarChangeListener.

    private SeekBar.OnSeekBarChangeListener mOnSeekbarChangeListener = new 
    
    SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
        if (fromUser) {
            if (true) {
                seekbar.setProgress(lastProgress);
            } else {
                seekbar.setProgress(progress);
            }
        }
    }
    
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        lastProgress = seekBar.getProgress();
    }
    
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    
    }
    };
    
...