Android SeekBar Минимальные и непрерывные атрибуты значения с плавающей запятой - PullRequest
2 голосов
/ 10 июня 2010

Я ищу способ реализации минимального значения в моем SeekBar, а также возможность увеличения десятичных чисел. Например, в настоящее время мой минимум SeekBar установлен на 0, но мне нужно, чтобы он начинался со значения 0,2. Кроме того, я хотел бы иметь функциональность, позволяющую пользователю выбирать число от 0,2 до 10,0 с точностью до 0,1, чтобы они могли выбирать числа 5,6 или 7,1.

Вот атрибуты стиля для моего SeekBar:

 <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>

Ответы [ 4 ]

3 голосов
/ 06 сентября 2011

Значения, которые можно использовать для прогресса, ограничены значениями от нуля до некоторого максимального значения, которое мы выбираем.Однако мы можем масштабировать эти значения с помощью арифметических операций.Например, давайте установим максимальное значение 200 в XML-файле.Затем измените 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 единицы.

2 голосов
/ 09 сентября 2010

, чтобы установить начальный прогресс, который вы можете сделать:

SeekBar yourSeekBar = (SeekBar) findViewById(R.id.seek_bar);
yourSeekBar.setProgress(20);

Это должно показать вашу панель поиска с желаемой стартовой позицией (на 0,2), если макс установлен на 100.

1 голос
/ 06 августа 2011

Я вижу, у вас уже есть первая часть, которая описывает, как делать значения с плавающей запятой.Вот как я реализую минимальное ограничение: (игнорируя преобразование значения с плавающей запятой)

int mySbValue;
SeekBar sb = (SeekBar) findViewById(R.id.seekbar);  
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (progress < MIN) {
            mySbValue = MIN;
        } else {
            mySbValue = progress;
        }
    }
...
0 голосов
/ 23 марта 2015

Скопируйте этот класс и используйте пользовательскую панель поиска:

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);

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...