2014-11-13 54 views
0

我试图展示一个简单的颜色选择器,以便用户可以选择几个文本的颜色......但是我迄今发现的每个颜色选择器似乎都过于复杂。如果至少我有一些想法,我不介意自己编码。Android:简单的颜色选择器

任何人都可以提供一些简单的颜色选择器的代码? 或者指点我进一步研究如何编码的方向?

我想实现这样的事情:

http://i.imgur.com/gIYWpiJ.jpg

+1

已经回答了 - 看帖子[链接](http://stackoverflow.com/questions/4342757/how-to-make -a-color-gradient-in-a-seekbar) – Wildroid

+0

那会很棒,但它不会编译,LinearGradient的构造函数方法失败 –

+1

Checkout this [link](http://stackoverflow.com/questions/6980906/android-color-picker) – Mantas

回答

3

试试这个:

在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); 
+0

Thx,除了颜色仅适用于一半条,我认为它必须与LinearGradient构造函数有关,所以我会寻找文档并尝试修复它。 –

+0

@ArtemioRamirez你必须调整酒吧的大小来匹配渐变宽度,反之亦然 - 注意两个地方的300 - seekbar和渐变 – Wildroid

+0

是的,我已经做了,thx。 –

3

在别人运行到这个位置的情况下,是用于检索值的代码:

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) { 

     } 
    });