根据Android中的SeekBar更改可绘制颜色
我有一个ImageView,它显示了我的资源文件夹的Drawable。其次,我在ImageView下面有一个seekbar。每个像素的颜色应该根据seekbar的值而改变。应该改变每个像素的颜色,当seekbar具有最大值时,每个像素的'g'和'b'值应该为0,以便只显示红色。如果您降低搜索栏,则应将其转回。根据Android中的SeekBar更改可绘制颜色
我认为这是通过将drawable转换为位图,遍历像素并根据当前的seekbar进度及其当前颜色值更改其颜色值来完成的。
但这只是一个想法。到目前为止,我无法以正确的方式实现这一点。也许你们中的一些人可以给出一个代码示例,或者甚至有更好的解决方案。如果有人能帮忙,会很高兴。
编辑:随着@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通道帮助吗?
如果有人有兴趣,这是我如何解决了pskinks帮助的问题:
(搜索栏仍然有包括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);
刚玩的价值得到一些其他的结果。到目前为止,这些是我获得最佳结果的价值。
我承认这是一个“黑色魔术“给我,但这些魔术浮点数做的很好:http://pastebin.com/Mdzbb7JY – pskink
查看'ColorMatrixColorFilter' – pskink
非常感谢!这似乎是我需要的东西 – MattLance
我希望你知道如何将它应用到你的'ImageView'上? – pskink