1

シークバーをベース 3 から開始し、2 ずつインクリメントし、最大値を 9 に設定したいのですが、3,5,7,9,11 が必要です。私のコードは

それは私が望むように機能していません、助けてください

SeekBar sb1 = (SeekBar)findViewById(R.id.sBtaxitype);

    sb1.setMax(11);
    sb1.setLeft(3);
    sb1.incrementProgressBy(2);
    sb1.setProgress(0); // Set it to zero so it will start at the left-most edge
    sb1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
             if (progress < 3) {
                 progress = 3;
                 progress = progress + 2;
             } else {
                 progress = progress + 2; // Add the minimum value (10)
             }

            TextView text = (TextView)findViewById(R.id.tvTaxitype);
            text.setText(Integer.toString(progress));

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {}

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {}

    });
4

2 に答える 2

1

setLeft()位置決め用です。ASeekBarは常に 0 の値から始まり、最大値 (デフォルトでは 100、 によって上書きされますsetMax()) まで上昇します。

3 ~ 11 の範囲を取得するには、 を呼び出し、現在の値を取得するときにsetMax(8)の結果に 3 を加算します。getProgress()

于 2013-10-15T14:06:43.557 に答える
0

SeekBar を少しずつ移動するには、テストしfromUser、進行状況を必要な値に設定します。この例では、進行状況インジケーターを移動すると、最も近い 10 に「スナップ」します。

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
  // round progress up or down to the nearest 10
  int roundedProgress = (int) (Math.rint((double) progress / 10) * 10);
  if (fromUser)
  {
    seekBar.setProgress(roundedProgress);
  }
}
于 2014-09-15T22:34:58.743 に答える