Предотвратите одно касание от изменения прогресса SeekBar - PullRequest
9 голосов
/ 26 февраля 2011

Я использую SeekBar в своем приложении для Android. Когда пользователь нажимает в любом месте на SeekBar, его значение прогресса изменяется. Я хочу, чтобы значение прогресса изменялось только тогда, когда пользователь перемещает большой палец SeekBar (точно так же, как UISlider в iOS).

Я попытался установить для свойства clickable SeekBar значение false, но это не сработало. Как мне добиться желаемого поведения?

Ответы [ 12 ]

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

глядя на код @lordmegamax, я обнаружил кое-что, что не работает.

  1. int oldProgress не может оставаться внутри onCreate, вам нужно объявить его снаружи.в начале onStartTrackingTouch всегда будет возвращать 0, поэтому ваш onStopTrackingTouch никогда не будет работать.

Немного подумав, я нашел решение.

//SeekBar Slide
    skbLogin.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        //Force Slide From Beginning
        public void onStartTrackingTouch(SeekBar seekBar) { continuosProgress = false; }
        //Execute when reach the max
        public void onStopTrackingTouch(SeekBar seekBar) {
            if(continuosProgress)
                if(seekBar.getProgress() == 100) btnLogin();
                else skbRollBack();
            else
                seekBar.setProgress(0);
        }
        //Check Slide from Beginning
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(progress < 10) continuosProgress = true;
        }
    });

Надеюсь, это поможет.С наилучшими пожеланиями

PS: это мой первый пост, извините, если я сделал что-то не так.

0 голосов
/ 26 февраля 2013
    int oldProgress;
    boolean isOn = true;
    vSeek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            oldProgress = seekBar.getProgress();
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            if (oldProgress == seekBar.getProgress()) {
                if (isOn) {
                    seekBar.setThumb(getResources().getDrawable(R.drawable.blck_btn));
                    isOn = false;
                } else {
                    seekBar.setThumb(getResources().getDrawable(R.drawable.blck_btn_selected));
                    isOn = true;
                }
            }
        }

Вы можете сравнить прогресс при остановке отслеживания.

...