简单的颜色选择器

5
我想展示一个简单的颜色选择器,以便用户可以选择一些文本的颜色... 但是到目前为止,我找到的每一个颜色选择器都对我的需求来说太过复杂了。如果至少我有一些想法,我也不介意自己编写它。
请问有人能给我提供一些简单的颜色选择器代码吗? 或者指点我如何进一步研究如何编写它?
我想实现类似于这样的效果: enter image description here

1
已经回答 - 请查看帖子链接:http://stackoverflow.com/questions/4342757/how-to-make-a-color-gradient-in-a-seekbar - Wildroid
太棒了,但它无法编译,LinearGradient的构造函数方法失败了。 - Artemio Ramirez
1
结帐这个(链接)link - Mantas
@Mantas,那实际上是我现在正在工作的代码,我正在自学编程到Android,所以当没有Google文档时,它变得更加困难,但我现在已经理解了大部分代码,很快就能编写自己的颜色选择器了。 - Artemio Ramirez
@ArtemioRamirez 现在已经编译成功了 - 我在下面发布了答案。 - Wildroid
2个回答

9

如果有其他人遇到此问题,这里是检索值的代码:

seekBarFont.setMax(256*7-1);
seekBarFont.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(fromUser){
                int r = 0;
                int g = 0;
                int b = 0;

                if(progress < 256){
                    b = progress;
                } else if(progress < 256*2) {
                    g = progress%256;
                    b = 256 - progress%256;
                } else if(progress < 256*3) {
                    g = 255;
                    b = progress%256;
                } else if(progress < 256*4) {
                    r = progress%256;
                    g = 256 - progress%256;
                    b = 256 - progress%256;
                } else if(progress < 256*5) {
                    r = 255;
                    g = 0;
                    b = progress%256;
                } else if(progress < 256*6) {
                    r = 255;
                    g = progress%256;
                    b = 256 - progress%256;
                } else if(progress < 256*7) {
                    r = 255;
                    g = 255;
                    b = progress%256;
                }

                seekBarFont.setBackgroundColor(Color.argb(255, r, g, b));
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

4
尝试这个:
在xml中使用:
<SeekBar
   android:id="@+id/seekbar_font"
   android:layout_width="300dip"
   android:layout_height="wrap_content"
   android:layout_margin="10px"
   android:max="100"
   android:progress="50"></SeekBar>

在活动中:

LinearGradient test = new LinearGradient(0.f, 0.f, 300.f, 0.0f,
              new int[] { 0xFF000000, 0xFF0000FF, 0xFF00FF00, 0xFF00FFFF,
              0xFFFF0000, 0xFFFF00FF, 0xFFFFFF00, 0xFFFFFFFF}, 
              null, TileMode.CLAMP);
        ShapeDrawable shape = new ShapeDrawable(new RectShape());
        shape.getPaint().setShader(test);

        SeekBar seekBarFont = (SeekBar)findViewById(R.id.seekbar_font);
        seekBarFont.setProgressDrawable( (Drawable)shape );

谢谢,这个几乎可以用,除了颜色只应用于一半的条形之外。我猜这可能与LinearGradient构造函数有关,所以我会查找文档并尝试修复它。 - Artemio Ramirez
@ArtemioRamirez 你需要调整滑动条的大小以匹配渐变宽度,或者反之亦然 - 注意到两个位置都是300 - 滑动条和渐变。 - Wildroid

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