如何在SeekBar中制作颜色渐变?

我想将SeekBar(即旧式Java Slider)用于颜色渐变选择器。 我见过这样的一些例子,但它们都需要创建新类等。 必须有一种方法来修改或覆盖原始类。 或者只是用渐变替换背景。

我在这里弄清楚你是怎么做到的。

您可以在XML中创建标准搜索条。

 

然后通过创建boxShape自定义onCreate()中的搜索条,然后在其中强制使用LinearGradient。

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

这是SeekBar Color Gradient上方当前代码的图像

这是使用LinearGradient提供的解决方案的补充。 尝试使用此逻辑将进度转换为rgb:

 lineColorSeekbar.setMax(256*7-1); lineColorSeekbar.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; } lineColorSeekbar.setBackgroundColor(Color.argb(255, r, g, b)); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });