根据滑动条数值改变颜色

7

我想根据拖动条的值改变颜色,希望颜色范围较宽。

以下是我尝试过的代码,但它并没有给出我想要的颜色:

seekBarColor.setOnSeekBarChangeListener( new OnSeekBarChangeListener() {
        int progress = 0;
          @Override
          public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
            progress = progresValue;
            int lower = Color.argb(0xFF,progress*0x10000, progress*0x100, progress)+0xff000000;
            color.setBackgroundColor(lower);
          }

          @Override
          public void onStartTrackingTouch(SeekBar seekBar) {

          }

          @Override
          public void onStopTrackingTouch(SeekBar seekBar) {
              db.updateColor("");
          }
    });

有什么想法吗?

你想从色环中获取颜色吗?因为根据你的代码,我猜测你得到了灰色调。 - Alex Salauyou
是的,我想从颜色圆中生成颜色,但是我的代码只返回灰色,我无法修复它。 - Sarah Sami
然后使用HSV颜色而不是RGB。下面我提供了一段代码片段。 - Alex Salauyou
2个回答

9
如果你只需要明亮、饱和的颜色,可以使用Color.HSVToColor(),而不是直接设置R、G和B组件:
float[] hsvColor = {0, 1, 1};
// generate only hue component in range [0, 360),
// leaving saturation and brightness maximum possible
hsvColor[0] = 360f * progress / maxProgress;
view.setBackgroundColor(Color.HSVToColor(hsvColor));

这段代码将从红色开始设置颜色,然后平滑地变化到橙色、黄色、绿色、蓝色和洋红色,当 progress0 变化到 maxProgress 时再回到红色。


我应该将最大进度设置为哪个值? - Sarah Sami
@SarahSami 如果你的进度从0开始,到100结束,那么就是到100。 - Alex Salauyou
为什么我无法获取任何黑色值? - Sarah Sami
@SarahSami 因为黑色的HSV值为{0, 0, 0}。首先,您需要确定想要获得哪种通过3D颜色空间的路线。从黑色到白色经过灰色阴影是一种可能的方式,从红色到红色经过彩色圆环的各种颜色是另一种方式...实际上,它们可以是不同的。 - Alex Salauyou
@SarahSami 首先你需要决定起始颜色、结束颜色以及中间点的颜色变化方式。解决方案会有所不同。 - Alex Salauyou
@SashaSalau,你能帮我吗?我该如何在 Android 的圆形 seekbar 中使用 4 种不同的颜色来显示“偏瘦”、“正常”、“超重”和“肥胖”这四个范围中的三个不同范围呢? - Erum

2
你需要将0-255的值传递给Color.argb(int,int,int,int)方法。
这样做可能有效吗?
Color.argb(0xFF, progress, progress, progress) //will return some gray color based on progress. 

您可能需要根据最小值和最大值缩放进度值。 例如,如果您的进度是0-100,则应使用progress * 255 / 100计算颜色值。


但我不想只得到灰色,我想从色彩圆中生成所有颜色。 - Sarah Sami
嗯,我不知道你的颜色圆是如何工作的,但你肯定要根据用户触摸视图的位置来调整传递给Color.argb函数的红色、绿色和蓝色值。 顺便说一下,如果您使用完全不透明的 alpha 值,可以使用 Color.rgb 函数,该函数返回具有完全不透明 alpha 值(255)的 RGB 颜色。 - Sipka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接