我想实现一个适合我的应用程序的简单hsv颜色选择器。作为已知形式的颜色选择器,我想根据其他搜索栏的值更改搜索栏的背景。
但是当我开始活动时,我看到了这一点:
在第一次触摸其中一个seekBars(无论哪个)后,我得到了这个结果,在第一次触摸后,布局保持这样,并且不会随着进一步的触摸而改变(这也是我根据我的预期布局,顶部的2个seekBars是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"/>
onProgressChanged()中有一个OnSeekBarChangeListener,当然还有onCreate(用于初始化seekBars)我调用了以下函数(为了保护你很多代码,只显示了Hue Gradient):
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);
}
我已经尝试了很多不同的东西:
结果始终相同。
我在这里做错了什么?我错过了什么吗?
修改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();
}
});
答案 0 :(得分:1)
如果你在侦听器之后移动setGradients()。
mSbHue = (SeekBar)findViewById(R.id.SbColorPickerHue);
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();
}
});
setGradients();