从android SeekBar中的LinearGradient获取准确的颜色代码

时间:2015-05-05 12:08:45

标签: android linear-gradients android-seekbar

我的项目要求创建填充不同色调的SeekBar。为此,我通过分配开始和结束颜色值来使用LinearGradient,它也像魅力一样工作。但是当位置发生变化时,我不知道如何从搜索栏中获取确切的颜色代码。

我还发布了一些代码供您参考:

public class SeekbarActivity extends Activity {

    private SeekBar volumeControl = null;
    private View view;
    private ShapeDrawable shape;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seekbar);

        volumeControl = (SeekBar) findViewById(R.id.volume_bar);

        view = (View) findViewById(R.id.seek_view);

        LinearGradient test = new LinearGradient(0.f, 0.f, 300.f, 0.0f,
                Color.BLACK, Color.RED, TileMode.CLAMP);

        shape = new ShapeDrawable(new RectShape());
        shape.getPaint().setShader(test);

        volumeControl.setProgressDrawable((Drawable) shape);

        volumeControl.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {

            }

            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }

            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }

} 

输出图片

enter image description here

3 个答案:

答案 0 :(得分:1)

您要做的是首先确定您的最终颜色(十六进制代码)。在你的例子中,这是红色的,所以我假设它是#FF0000。现在黑色(#000000)和红色(#FF0000)之间的差异= #FF,十进制值为255.

您可以将搜索条的值处理为0到255之间的值。如果将所选值转换为HEX并用红色HEX替换前两个字符,那么您将获得更深的红色阴影。 / p>

一个例子:

您的搜索栏值为216.

216的十六进制值是D8

由于RED由十六进制代码中的前两个字符表示颜色,因此十六进制代码#D80000表示您想要的红色阴影。

答案 1 :(得分:1)

没有默认选项可以使用搜索栏获取颜色阴影,但使用颜色代码进行的一些计算将为您提供结果。这就是我使用搜索栏获取色调的方法

seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            int a = Color.alpha(selectedColor);
            int r = Color.red(selectedColor);
            int g = Color.green(selectedColor);
            int b = Color.blue(selectedColor);
            int rr = (progress*r)/100;
            int gg = (progress*g)/100;
            int bb = (progress*b)/100;
            colorView.setBackgroundColor(Color.argb(a, rr, gg, bb));

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

答案 2 :(得分:0)

如果您的起始颜色(如白色)或任何其他颜色与结束颜色不同,则可以使用以下

private static int findColor(int selectedColor, float ratio) {
    final float inverseRation = 1f - ratio;
    float r = (Color.red(selectedColor) * ratio) + (Color.red(Color.WHITE) * inverseRation);
    float g = (Color.green(selectedColor) * ratio) + (Color.green(Color.WHITE) * inverseRation);
    float b = (Color.blue(selectedColor) * ratio) + (Color.blue(Color.WHITE) * inverseRation);
    return Color.rgb((int) r, (int) g, (int) b);
}

将此称为函数

 float ratio = (float) progress / 100;
 selected_color = findColor(color, ratio);

选择的颜色是最终颜色(当前为红色),

  

颜色。白色

在这种情况下为起始颜色(黑色),并且进度为0到100。