我的项目要求创建填充不同色调的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) {
}
});
}
}
输出图片
答案 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。