安卓 BitmapShader 如何改变颜色

4

我希望你能协助我完成我想要达到的目标。在我的应用程序中,我使用 BitmapShader 在画布上绘图。我将一个自定义的png文件作为着色器设置到我的paint变量中,并希望更改着色器的颜色。

这是我正在使用的示例代码:

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.particle_point);
    BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
    mPaint.setShader(shader);
    ColorFilter filter = new LightingColorFilter(0xFFFFFFFF , 0x000000FF );
    mPaint.setColorFilter(filter);

我发现我可以使用以下代码更改它的颜色: ColorFilter filter = new LightingColorFilter(0xFFFFFFFF, 0x000000FF); 但是,我需要能够使用自定义颜色选择器更改它的颜色,该选择器返回类似于此的颜色代码: -234423123.
那么,有没有办法使用这个颜色代码,并将其设置为我的绘画变量的颜色。
提前感谢!

你使用的是哪个颜色选择器? - Moss
我正在使用这个颜色选择器:http://code.google.com/p/color-picker-view/ - Android-Droid
3个回答

2

您需要转换为十六进制的颜色是:FFFFFFFFF206FCAD。因此,您只需要去掉前面的8个Fs:

int color = -234423123;//0xFFFFFFFFF206FCAD
int myColor = 0x00000000FFFFFFFF & color;

我的颜色应该没问题。


1

为了更详细地补充Moss的答案,你可以使用myColor作为你想要的值,并将正确的值设置到你的着色器中,你需要像这样将myColor添加到你的LightingColorFilter中:

ColorFilter filter = new LightingColorFilter(myColor , myColor );

它应该可以工作。


非常感谢您的回答,我只是在努力理解它。 - Android-Droid

0

获取十六进制字符串:

"#"+Integer.toHexString(n));

但是你的颜色选择器只返回颜色的整数值,这应该足够使用!

ColorFilter filter = new LightingColorFilter(0xFFFFFFFF , 0x000000FF );

只需将代表颜色的值更改为您的颜色选择器返回的int值...(当然不要在前面加上0x)...

如果我没错的话,这应该可以正常工作!


我的颜色选择器返回的值看起来像是-32314112之类的。如果我将这个值设置为我的“ColorFilter”中的第一个值,无论我选择哪种颜色,它都会保持为黑色。 - Android-Droid
哦,好的,看起来这个不能处理负数值,Moss的解决方案在这种情况下是正确的! - Ferdau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接