Android SeekBar:ProgressDrawable仅在第一次进度更改后显示
我想实现一个简单的hsv颜色选择器,很适合我的应用程序。作为已知的表单颜色选择器,我想根据其他seekbar的值更改seekbar的背景 但当我开始活动时,我看到了: 在第一次触摸其中一个搜索杆(无论哪一个)后,我得到了这个结果,在第一次触摸后,布局保持不变,并且不会随着进一步触摸而改变(这也是我根据布局所期望的,顶部的2个搜索杆为20度,下面的1个与拇指一样高): 就像在第二张图片中看到的那样,我希望从一开始就拥有seekBar 以下是我的布局:Android SeekBar:ProgressDrawable仅在第一次进度更改后显示,android,customization,seekbar,Android,Customization,Seekbar,我想实现一个简单的hsv颜色选择器,很适合我的应用程序。作为已知的表单颜色选择器,我想根据其他seekbar的值更改seekbar的背景 但当我开始活动时,我看到了: 在第一次触摸其中一个搜索杆(无论哪一个)后,我得到了这个结果,在第一次触摸后,布局保持不变,并且不会随着进一步触摸而改变(这也是我根据布局所期望的,顶部的2个搜索杆为20度,下面的1个与拇指一样高): 就像在第二张图片中看到的那样,我希望从一开始就拥有seekBar 以下是我的布局: <SeekBar andro
<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"/>
我已经尝试了很多不同的东西:
- 在onCreate中设置两次渐变
- 在onRescume中再次设置渐变
- 从布局xml中可以看出,我将一些SeekBar设置为固定高度(20dp),另一些设置为包装内容。行为发生了一些变化(如图所示)。但仍然不令人满意
- 使seekBar或Drawable无效
- 部队布局
- 测量可拉深的长度
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();
}
});
如果在侦听器之后移动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();
如果在侦听器之后移动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();
你能在声明seekbar、它们的监听器和监听器代码的地方发布代码吗?尝试了一些进一步的事情:用线程在oncreate后1秒更新可绘制的代码:无更改。以编程方式将seekbar添加到视图:无更改。我现在完全没有主意了…顺便说一句:在4台设备上测试这种行为:2台htc、摩托罗拉、三星galaxy nexus:everwhere相同的结果…尝试在setGradients中添加一些日志消息,以确保在您与seekbarI交互时调用它,之前已经检查过了。setGradients()在OnCreate()中被定义调用,并且在每次ProgressChanged中都被调用。您能在声明seekbar、其侦听器和侦听器代码的地方发布代码吗?尝试了一些进一步的事情:在OnCreate后1秒通过线程更新可绘制的内容:无更改。以编程方式将seekbar添加到视图:无更改。我现在完全没有主意了…顺便说一句:在4台设备上测试这种行为:2台htc、摩托罗拉、三星galaxy nexus:everwhere相同的结果…尝试在setGradients中添加一些日志消息,以确保在您与seekbarI交互时调用它,之前已经检查过了。setGradients()在OnCreate()中定义调用,并且每次ProgressChanged时都会调用。否。起初我把它放在我面前。然后我试着像你在听众后面说的setGradients()。然后我在前面试过一次,在后面试过一次。一点也没变。嗯……一开始我确实和你有同样的问题。然后我移动了梯度。也许我可以发布我的测试项目,这样你就可以看到它真正起作用了?当然。这并不是说我想拒绝你的回答:)如果有任何帮助,我可以上传完整的颜色选择器类。啊,我们更接近了:你设置了背景。如果我使用您的代码并设置progressDrawable,那么行为是相同的。这就给我带来了一个解决方法:就像在你的代码中一样,我将BackgroundDrawable设置为颜色,并将Progressdrawable设置为colorDrawable(0x00000000)作为颜色。谢谢!不,起初我把它放在我面前。然后我试着像你在听众后面说的setGradients()。然后我在前面试过一次,在后面试过一次。一点也没变。嗯……一开始我确实和你有同样的问题。然后我移动了梯度。也许我可以发布我的测试项目,这样你就可以看到它真正起作用了?当然。这并不是说我想拒绝你的回答:)如果有任何帮助,我可以上传完整的颜色选择器类。啊,我们更接近了:你设置了背景。如果我使用您的代码并设置progressDrawable,那么行为是相同的。这就给我带来了一个解决方法:就像在你的代码中一样,我将BackgroundDrawable设置为颜色,并将Progressdrawable设置为colorDrawable(0x00000000)作为颜色。谢谢!