根据Android中的SeekBar更改可绘制颜色

时间:2017-02-09 11:21:33

标签: android rgb android-drawable android-bitmap android-seekbar

我有一个ImageView,它显示了我的资源文件夹的Drawable。其次我在ImageView下面有一个搜索栏。应根据搜索条的值更改每个像素的颜色。应该改变每个像素的颜色,当搜索条具有最大值时,每个像素的“g”和“b”值应为0,以便仅显示红色。如果你降低搜索栏,它应该被转换回来。

我认为这是通过将drawable转换为位图,迭代像素并根据当前搜索栏进度及其当前颜色值更改颜色值来完成的。

但这只是一个想法。到目前为止,我无法以正确的方式实现这一点。也许你们中的一些人可以提供代码示例,甚至可以为此提供更好的解决方案。如果有人可以提供帮助,我会很高兴。

编辑:在@pskink的帮助下(见下面的评论),我能够实现这个目标:

float colorValue = 1 - (float) seekBar.getProgress() / 100; // SeekBar has 100 as maxVal

float[] colorMatrix = {
     1, 0, 0, 0, 0,  //red
     0, colorValue, 0, 0, 0, //green
     0, 0, colorValue, 0, 0,  //blue
     0, 0, 0, 1, 0    //alpha
};

ColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
backgroungImageView.setColorFilter(colorFilter);

现在的问题(显然)不仅原始的红色部分突出。一切都是红色的,这也不是我想要的。我试图实现的目标是当搜索栏达到最大级别时仅显示红色部分。如果使用ColorMatrix也可以,但我不确定会很酷。有什么建议?可以玩Alpha通道帮助吗?

1 个答案:

答案 0 :(得分:0)

如果有人有兴趣,请通过pskinks帮助解决问题:

(SeekBar仍有maxValue 100)

float pr = seekBar.getProgress() / (float) 50;

float[] colorMatrix = {
         1, 0, 0, 0, 0,  //red
         0, 1, 0, 0, 0, //green
         0, 0, 1, 0, 0,  //blue
         pr / 2, -pr, -pr, 1, 0    //alpha
};

ColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
backgroungImageView.setColorFilter(colorFilter);

只需使用这些值来获得其他一些结果。到目前为止,这些是我获得最佳结果的价值。