Android SeekBars OnSeekBarChangeListener。特に、onProgressChangedメソッドは、シークバーの最初と最後のタッチに対してのみ通知されますか?
SeekBarの現在の進行状況を表示するTextViewを更新しようとしています。ただし、TextViewは最初のタッチと最後のタッチで更新されます。これをデバッグすると、このメソッドが2回だけ呼び出されるという私の仮定が確認されます。(.
要するに、私は小さな進捗の変化ごとに呼び出される進捗リスナーを取得する可能性を探しています。
これがあなたの助けになることを願っています:
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();
}
});
onProgressChanged()は、最初と最後のタッチ(onStartTrackingTouch()およびonStopTrackingTouch()メソッドがある理由)だけでなく、進行状況が変更されるたびに呼び出す必要があります。
SeekBarに複数の値があること、つまり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) {}
}
さらなるヘルプのために、いくつかのコードとログ結果を共有してください。
onProgressChangedは、カーソルを移動するたびに呼び出されます。
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.valueOf(new Integer(progress)));
}
そのため、textViewは進行状況を表示し、シークバーが移動している場合は常に変更する必要があります。
すべてのメソッドをオーバーライドする
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
すべての答えは正しいですが、最初に長い大きな脂肪数をタイマーに変換する必要があります。
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)));
}