listview
とseekbar
があり、各seekbar
は製品の値の100%を表します。 seekbar
を移動することで、%値を変更できます。ユーザーがseekbar
をドラッグしているときに、シークバーに沿って値の変化を表示したいと思います。 not値が更新される別のテキストボックスを追加したいのですが。
シークバーポインタの上に小さなビューを表示するオプションをもっと探しています。これはonStartTracking
に表示され、onStopTracking
イベントが消えます。
これを達成する方法はありますか?
xmlファイルにテキストビューを追加すると、次のようなlinrarlayoutを使用できます。
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<SeekBar
Android:id="@+id/seekBar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:max="1000" />
<TextView
Android:id="@+id/textView4"
Android:layout_width="80dp"
Android:layout_height="wrap_content"
Android:layout_weight="1" />
</LinearLayout>
およびJavaファイルで、seekbarのonProgressChangedメソッドのテキストビューテキストを変更します。
SeekBar sk = (SeekBar) findViewById(R.id.seekBar);
sk.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
TextView t=(TextView)findViewById(R.id.textView4);
t.setText(String.valueOf(i));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
これをチェックしてください library out。 '単一の親指でtrueに範囲シークバー'を使用できます。
受け入れられた答えは、おそらくほとんどの状況で十分です。ただし、テキストがシークバーの親指の真ん中に正確に収まるように精度が必要な場合は、もう少し計算する必要があります。これは、テキストの幅が異なるためです。たとえば、0から150までの数字を表示したいとします。188の幅は111とは異なります。このため、表示するテキストは常にある側に傾いています。
それを解決する方法は、テキストの幅を測定し、シークバーの親指の幅からそれを削除し、それを2で割って、受け入れられた回答で与えられた結果にそれを追加することです。これで、数値範囲がどれだけ大きいかは気になりません。コードは次のとおりです。
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
val value = progress * (seekBar.width - 2 * seekBar.thumbOffset) / seekBar.max
label.text = progress.toString()
label.measure(0, 0)
val textWidth = label.measuredWidth
val firstRemainder = seekThumbWidth - textWidth
val result = firstRemainder / 2
label.x = (seekBar.x + value + result)
}
テキストビューを親指の中心位置Xに実際に揃えるには
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
progressTextView.setText(String.valueOf(progress));
int width = seekBar.getWidth() - seekBar.getPaddingLeft() - seekBar.getPaddingRight();
int thumbPos = seekBar.getPaddingLeft() + width * seekBar.getProgress() / seekBar.getMax();
progressTextView.measure(0, 0);
int txtW = progressTextView.getMeasuredWidth();
int delta = txtW / 2;
progressTextView.setX(seekBar.getX() + thumbPos - delta);
}