Я хочу реализовать простой инструмент выбора цвета hsv, который хорошо вписывается в мое приложение. Как известные средства выбора цвета формы, я хотел бы изменить фон seekBars в соответствии со значением других seekBars.
Но когда я начинаю занятие, я вижу это:
После первого прикосновения к одному из seekBars (независимо от того, какой) я получаю этот результат, и после первого касания раскладка остается такой же и не изменяется при дальнейших касаниях (что также было бы ожидаемым согласно моим компоновка, 2 полосы поиска сверху 20dip, а 1 ниже, как большой палец):
Как видно на втором рисунке, я хотел бы получить seekBar с самого начала.
Вот мой макет:
<SeekBar
android:id="@+id/SbColorPickerHue"
android:layout_width="match_parent"
android:layout_height="20dip"
android:max="360"
android:thumb="@drawable/colorpickerthumb" />
<SeekBar
android:id="@+id/SbColorPickerSaturation"
android:layout_width="match_parent"
android:layout_height="20dip"
android:max="255"
android:thumb="@drawable/colorpickerthumb"/>
<SeekBar
android:id="@+id/SbColorPickerValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255"
android:thumb="@drawable/colorpickerthumb"/>
С OnSeekBarChangeListener в onProgressChanged () и, конечно, в onCreate (чтобы инициализировать seekBars), я вызываю следующую функцию (чтобы обезопасить вас от большого количества кода, отображается только градиент оттенка):
private void setGradients() {
mHueGradient = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,mColors);
mHueGradient.setGradientType(GradientDrawable.LINEAR_GRADIENT);
mHueGradient.setCornerRadius(mRadius);
mHueGradient.setStroke(mStrokeWidth, mStrokeColor);
mSbHue.setBackgroundDrawable(mHueGradient);
}
Я уже пробовал много разных вещей:
- установить градиенты дважды в onCreate
- снова установить градиенты в onRescume
- как видно из макета xml, я установил некоторые из SeekBar на фиксированную высоту (20dp), а другие - wrap_content. Поведение немного изменилось (как видно на фотографиях). Но все равно не удовлетворяет.
- Недействительно либо seekBar, либо Drawable
- Force Layout
- Мера рисования
Результат всегда один и тот же.
Что я здесь не так делаю? Я что-то упустил?
Редактировать 1:
SeekBar и ChangeListener определены следующим образом:
mSbHue = (SeekBar)findViewById(R.id.SbColorPickerHue);
setGradients();
mSbHue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
setGradients();
}
});