在颜色选择器中,我有3个用于色调,饱和度和值的SeekBars.在这些SeekBars上调用setProgressDrawable只能运行一次 - 在onCreate初始化时.当用户更新Hue SeekBar时,我想为Saturation和Value SeekBars调用setProgressDrawable,以向用户显示新Hue的颜色选择.
但是所有对setProgressDrawable的调用(在最初的调用之后onCreate)导致SeekBar被清空.
如何根据用户输入更新SeekBars的背景渐变?
小智 43
我发现,当调用setprogressdrawable时,drawable不知道它的大小.最初设置时,它确实知道它的大小.这意味着搜索栏有一个新的可绘制集,但是drawable的大小为0,你什么都看不到.
解决方案是首先获取当前drawable的边界,然后设置new drawable并最终再次设置边界:
Rect bounds = mySeekBar.getProgressDrawable().getBounds();
mySeekBar.setProgressDrawable(newSeekBarBackground);
mySeekBar.getProgressDrawable().setBounds(bounds);
Run Code Online (Sandbox Code Playgroud)
嘿,我找到了解决方案,您首先必须通过调用 setProgresssDrawable(drawable) 将可绘制对象设置为 ProgressBar,然后才设置值,反之亦然。那会起作用的。
设置进度绘制:
使用如下所示的可绘制 xml 文件:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient android:startColor="#00CCCC"
android:centerColor="#00CCCC" android:centerY="0.75"
android:endColor="#00CCCC" android:angle="270" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient android:startColor="#00CCCC"
android:centerColor="#00CCCC" android:centerY="0.75"
android:endColor="#00CCCC" android:angle="270" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient android:startColor="#00CCCC" android:centerColor="#00CCCC"
android:centerY="0.75" android:endColor="#00CCCC" android:angle="270" />
</shape>
</clip>
</item>
Run Code Online (Sandbox Code Playgroud)
将其保存到 /drawable 文件夹中并在 setProgressDrawable(drawable) 函数中使用它
| 归档时间: |
|
| 查看次数: |
11293 次 |
| 最近记录: |