Как я могу настроить чувствительность Android SeekBar - PullRequest
3 голосов
/ 07 октября 2010

Я попытался использовать SeekBar в первый раз, и я был разочарован результатами. У меня есть приложение, которое должно использовать ползунок, чтобы покрыть 80 мест. Я хочу, чтобы пользователь мог перемещаться с шагом 0,5 (т. Е. 10,5, 11,0). Мой максимальный диапазон составляет 40, поэтому я удвоил его до 80, чтобы учесть десятичные дроби.

Все работало, но когда я поставил его на свой Droid, по моему мнению, производительность была ужасной. При попытке остановиться на 21,5 ползунок обычно останавливался на 22,0 или 22,5, и мне пришлось потратить дополнительное время, чтобы попытаться перевернуть его. В других случаях я пытался выбрать слайдер, и он не отвечал. Я не так обеспокоен отсутствием ответа, но я не могу включить SeekBar в свое приложение, если требуется, чтобы пользователь имел точную точность, чтобы попасть в определенное место.

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

Если нет хорошего способа отрегулировать чувствительность, есть ли хорошая альтернатива, которую я могу использовать, которая обеспечивает аналогичную функциональность?

Ответы [ 2 ]

4 голосов
/ 04 февраля 2012

У меня точно такая же проблема, и я придумал собственный способ снижения чувствительности. Проблема для меня возникает, когда я покидаю ползунок, и он непреднамеренно перемещается из-за толщины пальцев и т. Д. Поэтому я написал таймер, чтобы увидеть, была ли позиция выбрана на некоторое время, и привязать к этой позиции оставляя панель поиска. Этот метод немного неуклюж, но это лучшее, что я могу придумать, учитывая, что мне не нужны кнопки +/-, как предложено выше. Это хорошо работает для моих нужд. Вот код для всех, кто заинтересован:

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            int lastProgress = 0;
            Timer endTimer = null;
            boolean timerExpired = false;

            class SeekBarTimerTask extends TimerTask {
                public void run() {
                    timerExpired = true;
                }
            }

            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(timerExpired == false) {
                    // clean up the previous timer and start a new one
                    setTimer();
                }
                else {
                    // if the timer has expired, do not honor small variations of 2%
                    if(Math.abs(progress - lastProgress) <= seekBar.getMax() * 0.02) {
                        seekBar.setProgress(lastProgress);
                        return;
                    }
                    else {
                        // The variation is not small. This means that the seekbar position change
                        // was intentional. Honor it and schedule the timer again.
                        setTimer();
                    }
                }

                lastProgress = progress;
            }

            public void onStartTrackingTouch (SeekBar seekBar) {}
            public void onStopTrackingTouch (SeekBar seekBar) {
                timerExpired = false;
                endTimer.cancel();
                endTimer.purge();
            }

            private void setTimer() {
                if(endTimer != null) {
                    endTimer.cancel();
                    endTimer.purge();
                }

                timerExpired = false;
                endTimer = new Timer();
                endTimer.schedule(new SeekBarTimerTask(), 300);
            }
        });
2 голосов
/ 08 октября 2010

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

В значительной степени это.Одна вещь, которую вы могли бы сделать, это добавить небольшую кнопку плюс и минус рядом с панелью поиска, которая увеличивает и уменьшает значение на 0,5.Таким образом, вы все равно можете использовать панель поиска для общих случаев, и при необходимости уточните свой выбор с помощью кнопок.Возможно, не самое элегантное решение, но оно наверняка сработает.

...