52

シークバーがあり、移動中に値を 0 から 200 に変更したいです。シークバーを移動しながらそれらの値を表示する TextView があります。しかし、その間隔(0、1、2、3、4、5 ...)のすべての値を取得したくはありませんが、10、20、30などを取得したいと考えています。したがって、シークバーを移動すると、10,20,30,40 .... を 200 に表示したいのですが、これを行う方法のヒントや例を教えてもらえますか?

4

8 に答える 8

119

以下のコードを試してください

SeekBar seekBar = (SeekBar)layout.findViewById(R.id.seekbar);
seekBar.setProgress(0);
seekBar.incrementProgressBy(10);
seekBar.setMax(200);
TextView seekBarValue = (TextView)layout.findViewById(R.id.seekbarvalue);
seekBarValue.setText(tvRadius.getText().toString().trim());

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        progress = progress / 10;
        progress = progress * 10;
        seekBarValue.setText(String.valueOf(progress));
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
});

setProgress(int)シークバーの開始値を設定するために使用されます

setMax(int)シークバーの最大値を設定するために使用されます

シークバーの境界を設定する場合は、 onProgressChangedメソッドでプログレスバーの値を確認できます。進行状況が境界よりも小さいか大きい場合は、定義した境界に進行状況を設定できます。

于 2011-09-07T05:33:04.583 に答える
18

私が考えることができる最も簡単な方法は、単に定義することです:

SeekBar yourSeekBar = (SeekBar)findViewById(R.id.yourSeekBarId);
yourSeekbar.setMax(20);

次に、これらのメソッドをオーバーライドします (空であっても、空のメソッドも必要です)。

yourSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {          
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (fromUser) {
                if (progress >= 0 && progress <= sizeSeekBar.getMax()) {                        

                    String progressString = String.valueOf(progress * 10);
                    yourTextView.setText(progressString); // the TextView Reference
                    seekBar.setSecondaryProgress(progress);
                }
            }

        }
    });

アイデアは、シークバーに 20 個の値のみを定義することですが、常に値を 10 倍してその値を表示します。200 個の値が本当に必要ない場合は、200 個の値を使用しても意味がありません。

于 2012-06-24T18:06:50.777 に答える
3

SeekBar.OnSeekBarChangeListener進行状況の変化を追跡するには、 を使用する必要があります。コールしmseek.setMax(200)ます。現在の値に対してモジュロ演算を実行して、テキストビューを更新する必要があるかどうかを決定します。

SeekBar.OnSeekBarChangeListener() {

    void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (progress % 10 == 0) {
            textview.setText(""+progress);
        }
    }
}
于 2011-09-07T05:28:59.870 に答える