Android SeekBar setOnSeekBarChangeListener - PullRequest
34 голосов
/ 22 января 2012

Меня интересует поведение андроида SeekBars OnSeekBarChangeListener.В частности, уведомляется ли метод onProgressChanged только для первого и последнего касания на панели поиска?

Я пытаюсь обновить TextView, который должен отображать текущий прогресс SeekBar.Но TextView просто обновляется при первом и последнем касании.Отладка этого подтверждает мое предположение, что этот метод вызывается только дважды :( Я хотел бы, чтобы TextView отображал каждое изменение прогресса в SeekBar.

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

Ответы [ 5 ]

75 голосов
/ 25 июля 2012

Надеюсь, это вам поможет:

final TextView t1=new TextView(this); 
t1.setText("Hello Android");        
final SeekBar sk=(SeekBar) findViewById(R.id.seekBar1);     
sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {       

    @Override       
    public void onStopTrackingTouch(SeekBar seekBar) {      
        // TODO Auto-generated method stub      
    }       

    @Override       
    public void onStartTrackingTouch(SeekBar seekBar) {     
        // TODO Auto-generated method stub      
    }       

    @Override       
    public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {     
        // TODO Auto-generated method stub      

        t1.setTextSize(progress);
        Toast.makeText(getApplicationContext(), String.valueOf(progress),Toast.LENGTH_LONG).show();

    }       
});             
12 голосов
/ 22 января 2012

onProgressChanged () следует вызывать при каждом изменении прогресса, а не только при первом и последнем касании (вот почему у вас есть методы onStartTrackingTouch () и onStopTrackingTouch ()).

Убедитесь, что ваш SeekBar имеет более 1 значения, то есть ваш MAX> = 3.

В вашем onCreate:

 yourSeekBar=(SeekBar) findViewById(R.id.yourSeekBar);
 yourSeekBar.setOnSeekBarChangeListener(new yourListener());

Ваш слушатель:

private class yourListener implements SeekBar.OnSeekBarChangeListener {

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
                            // Log the progress
            Log.d("DEBUG", "Progress is: "+progress);
                            //set textView's text
            yourTextView.setText(""+progress);
        }

        public void onStartTrackingTouch(SeekBar seekBar) {}

        public void onStopTrackingTouch(SeekBar seekBar) {}

    }

Пожалуйста, поделитесь кодом и результатами Журнала для дальнейшей помощи.

5 голосов
/ 22 января 2012

onProgressChanged вызывается каждый раз, когда вы перемещаете курсор.

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    textView.setText(String.valueOf(new Integer(progress)));        
}

, поэтому textView должен отображать прогресс и всегда изменяться при перемещении панели поиска.

2 голосов
/ 06 июня 2017

Все ответы верны, но сначала вам нужно преобразовать большое большое число в таймер:

    public String toTimer(long milliseconds){
    String finalTimerString = "";
    String secondsString;
    // Convert total duration into time
    int hours = (int)( milliseconds / (1000*60*60));
    int minutes = (int)(milliseconds % (1000*60*60)) / (1000*60);
    int seconds = (int) ((milliseconds % (1000*60*60)) % (1000*60) / 1000);
    // Add hours if there
    if(hours > 0){
        finalTimerString = hours + ":";
    }
    // Prepending 0 to seconds if it is one digit
    if(seconds < 10){
        secondsString = "0" + seconds;
    }else{
        secondsString = "" + seconds;}
    finalTimerString = finalTimerString + minutes + ":" + secondsString;
    // return timer string
    return finalTimerString;
}

И вот как вы его используете:

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.format("%s", toTimer(progress)));        
}
2 голосов
/ 06 мая 2014

Переопределить все методы

    @Override
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {


    }

    @Override
    public void onStartTrackingTouch(SeekBar arg0) {


    }

    @Override
    public void onStopTrackingTouch(SeekBar arg0) {


    }
...