Android SeekBar setOnSeekBarChangeListener
Меня интересует поведение андроида SeekBars OnSeekBarChangeListener. В частности, уведомляется ли метод onProgressChanged только для первого и последнего касания на панели поиска?
Я пытаюсь обновить TextView, который должен показывать текущий прогресс SeekBar. Но TextView просто обновляется при первом и последнем касании. Отладка этого подтверждает мое предположение, что этот метод вызывается только дважды :( Я хотел бы, чтобы TextView отображал все изменения прогресса в SeekBar.
Короче говоря: я ищу возможность получить слушателя прогресса, который вызывается для каждого небольшого изменения прогресса.
Ответы
Ответ 1
Я надеюсь, что это поможет вам:
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();
}
});
Ответ 2
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 text
yourTextView.setText(""+progress);
}
public void onStartTrackingTouch(SeekBar seekBar) {}
public void onStopTrackingTouch(SeekBar seekBar) {}
}
Пожалуйста, поделитесь некоторым кодом и результатами журнала для получения помощи.
Ответ 3
onProgressChanged вызывается каждый раз, когда вы перемещаете курсор.
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.valueOf(new Integer(progress)));
}
поэтому textView должен показывать прогресс и изменять всегда, если стрелка перемещается.
Ответ 4
Отменить все методы
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
Ответ 5
Все ответы верны, но вам нужно сначала преобразовать длинное большое количество жира в таймер:
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)));
}