14

シークバーを使用していますが、シークバーに特定のマークをテキストで追加して、それをスケールとして使用したいと考えています。選択した間隔ポイントが強調表示されます。 ここに画像の説明を入力

対応するコードは次のとおりです。

   seekbar = (SeekBar) findViewById(R.id.seekBar1);
    seekbar.setMax(max);
    seekbar.setProgress(50);
    seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            value.setText("SeekBar value is " + progress);
        }

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

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

3 に答える 3

6

上記のシーク バーを作成するには、まず背景のドローアブルとして測定スケールを追加する必要があります。次に、測定スケールの間隔ごとにテキスト ボックスを作成する必要があります。

<SeekBar 
        ....
android:progressDrawable="@drawable/progress"
android:thumb="@drawable/thumb"
        ....
/>

それで

public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {   
   progress = ((int)Math.round(progress/interval))*interval;
   seekBar.setProgress(progress);
   if(progress==5) textBox5.setTextColor(Color.RED);
   else if(progress==10) textBox10.setTextColor(Color.RED);
   //......... for all the text boxes.
}
于 2012-12-10T12:16:26.367 に答える
2

実際、上記のすべての解決策は、ロジックではない最後の進行ポイントを選択することを強制します。

それをより正確にするために、シークバーは最も近いドットを検出し、そこにジャンプする必要があります。

以下は解決策です。

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

    int progressStep = getMax() / dotsCount;

    int lastDotProgress = Math.round(getProgress() / progressStep) * progressStep;
    int nextDotProgress = lastDotProgress + progressStep;
    int midBetweenDots = lastDotProgress + (progressStep / 2);

    if (getProgress() > midBetweenDots)
        seekBar.setProgress(nextDotProgress);
    else
        seekBar.setProgress(lastDotProgress);
}

ドット間のシークを防ぎたい場合は、 onProgressChanged() で同じ動作を使用できます

于 2016-05-10T06:22:18.880 に答える
1
public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {   
 int s_size=5;
    progress = ((int)Math.round(progress/s_size))*s_size;
    seekBar.setProgress(progress);
    textview.setText(progress + "");
}

設定したいもの テキストは進行状況と textview.settext() の値から簡単に取得できます

于 2012-12-10T09:14:46.707 に答える