Android SeekBar最小和连续浮点值属性
我正在寻找一种在SeekBar中实现最小值的方法,并且可以选择递增十进制数。例如,当前我的SeekBar最小值设置为0,但我需要它从值0.2开始。此外,我还希望能够让用户以.1的精度选择0.2到10.0之间的数字,以便他们可以选择数字5.6或7.1 以下是我的SeekBar的样式属性:Android SeekBar最小和连续浮点值属性,android,Android,我正在寻找一种在SeekBar中实现最小值的方法,并且可以选择递增十进制数。例如,当前我的SeekBar最小值设置为0,但我需要它从值0.2开始。此外,我还希望能够让用户以.1的精度选择0.2到10.0之间的数字,以便他们可以选择数字5.6或7.1 以下是我的SeekBar的样式属性: <style name="SeekBar"> <item name="android:paddingLeft">30dp</item>
<style name="SeekBar">
<item name="android:paddingLeft">30dp</item>
<item name="android:paddingRight">30dp</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginTop">0dp</item>
<item name="android:layout_marginBottom">0dp</item>
<item name="android:max">10</item>
<item name="android:progress">1</item>
</style>
30dp
30dp
填补家长的空缺
包装内容
0dp
0dp
10
1.
要设置启动进度,可以执行以下操作:
SeekBar yourSeekBar = (SeekBar) findViewById(R.id.seek_bar);
yourSeekBar.setProgress(20);
如果最大值设置为100,则应显示seekbar和所需的起始位置(0.2)。我看到您已经有了第一部分,即如何执行浮点值。下面是我如何实现最小约束:(忽略浮点值转换)
int mySbValue;
SeekBar sb=(SeekBar)findViewById(R.id.SeekBar);
sb.setonseekbarchaneglistener(新SeekBar.onseekbarchaneglistener(){
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
如果(进度<分钟){
mySbValue=MIN;
}否则{
mySbValue=进步;
}
}
...
可用于进度的值被限制为介于零和我们选择的某个最大值之间的值。但是,我们可以使用算术运算来缩放这些值。例如,让我们在XML文件中将最大值设置为200。然后按以下方式更改java代码
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
sliderValueTW.setText(Float.toString((float)(progress-100)/10));
}
结果是,用户会看到滑块从-10.0变为10.0,增量为0.1个单位。复制此类并使用自定义搜索栏:
public class FloatSeekBar extends SeekBar implements SeekBar.OnSeekBarChangeListener {
private OnFloatSeekBarChangeListener floatListener;
private float floatMaxValue = 100.f;
private float floatPrgress = 0.f;
private float minPrgress = 0.f;
public float getMinPrgress() {
return minPrgress;
}
public void setMin(float minPrgress) {
this.minPrgress = minPrgress;
int middle = getMiddle(floatMaxValue, minPrgress);
super.setMax(middle);
}
private int getMiddle(float floatMaxValue, float minPrgress) {
float v = floatMaxValue - minPrgress;
int round = Math.round(v * 10);
return round;
}
public float getFloatPrgress() {
return floatPrgress;
}
public void setFloatPrgress(float floatPrgress) {
this.floatPrgress = floatPrgress;
int i = Math.round((floatPrgress - minPrgress) * 10);
super.setProgress(i);
}
public FloatSeekBar(Context context) {
super(context);
this.setOnSeekBarChangeListener(this);
}
public FloatSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.FloatSeekBar, 0, 0);
floatMaxValue = typedArray.getFloat(R.styleable.FloatSeekBar_maxValue, 100f);
minPrgress = typedArray.getFloat(R.styleable.FloatSeekBar_minValue, 0f);
floatPrgress = typedArray.getFloat(R.styleable.FloatSeekBar_floatProgress, 0f);
setFloatPrgress(floatPrgress);
this.setOnSeekBarChangeListener(this);
}
public float getMaxProgress() {
return floatMaxValue;
}
public void setMax(float value) {
floatMaxValue = value;
int middle = getMiddle(floatMaxValue, minPrgress);
super.setMax(middle);
}
public void setOnFloatSeekBarChangeListener(OnFloatSeekBarChangeListener floatListener) {
this.floatListener = floatListener;
int middle = getMiddle(floatMaxValue, minPrgress);
super.setMax(middle);
}
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
floatPrgress = minPrgress + i / 10.0f;
floatListener.onFloatSeekProgressChanged(seekBar, floatPrgress, b);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
floatListener.onStartTrackingTouch(seekBar);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
floatListener.onStopTrackingTouch(seekBar);
}
public static interface OnFloatSeekBarChangeListener {
public void onFloatSeekProgressChanged(SeekBar seekBar, float i, boolean b);
public void onStartTrackingTouch(SeekBar seekBar);
public void onStopTrackingTouch(SeekBar seekBar);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
您必须将android:max设置为100,并将每次的值除以10,从56中得到5.6。谢谢!请使用适当的界面自由回答问题,这样我就可以给您评分了。此外,任何关于最小值的帮助都将非常好。
public class FloatSeekBar extends SeekBar implements SeekBar.OnSeekBarChangeListener {
private OnFloatSeekBarChangeListener floatListener;
private float floatMaxValue = 100.f;
private float floatPrgress = 0.f;
private float minPrgress = 0.f;
public float getMinPrgress() {
return minPrgress;
}
public void setMin(float minPrgress) {
this.minPrgress = minPrgress;
int middle = getMiddle(floatMaxValue, minPrgress);
super.setMax(middle);
}
private int getMiddle(float floatMaxValue, float minPrgress) {
float v = floatMaxValue - minPrgress;
int round = Math.round(v * 10);
return round;
}
public float getFloatPrgress() {
return floatPrgress;
}
public void setFloatPrgress(float floatPrgress) {
this.floatPrgress = floatPrgress;
int i = Math.round((floatPrgress - minPrgress) * 10);
super.setProgress(i);
}
public FloatSeekBar(Context context) {
super(context);
this.setOnSeekBarChangeListener(this);
}
public FloatSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.FloatSeekBar, 0, 0);
floatMaxValue = typedArray.getFloat(R.styleable.FloatSeekBar_maxValue, 100f);
minPrgress = typedArray.getFloat(R.styleable.FloatSeekBar_minValue, 0f);
floatPrgress = typedArray.getFloat(R.styleable.FloatSeekBar_floatProgress, 0f);
setFloatPrgress(floatPrgress);
this.setOnSeekBarChangeListener(this);
}
public float getMaxProgress() {
return floatMaxValue;
}
public void setMax(float value) {
floatMaxValue = value;
int middle = getMiddle(floatMaxValue, minPrgress);
super.setMax(middle);
}
public void setOnFloatSeekBarChangeListener(OnFloatSeekBarChangeListener floatListener) {
this.floatListener = floatListener;
int middle = getMiddle(floatMaxValue, minPrgress);
super.setMax(middle);
}
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
floatPrgress = minPrgress + i / 10.0f;
floatListener.onFloatSeekProgressChanged(seekBar, floatPrgress, b);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
floatListener.onStartTrackingTouch(seekBar);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
floatListener.onStopTrackingTouch(seekBar);
}
public static interface OnFloatSeekBarChangeListener {
public void onFloatSeekProgressChanged(SeekBar seekBar, float i, boolean b);
public void onStartTrackingTouch(SeekBar seekBar);
public void onStopTrackingTouch(SeekBar seekBar);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}