通过保留内部颜色来更改图标的颜色

时间:2018-04-17 08:39:17

标签: java android

我有一个红色的位置图标,里面有一个白色圆圈。 我想以编程方式将其颜色更改为黄色,保留白色圆圈。 我正在使用此代码 -

Drawable drawable = getActivity().getResources().getDrawable(R.drawable.location_icon);
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
drawable.setColorFilter(new PorterDuffColorFilter(context.getResources().getColor(R.color.yellow_color), PorterDuff.Mode.MULTIPLY));
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return BitmapDescriptorFactory.fromBitmap(bitmap);

如何通过在其中保留白色圆圈来将其设为黄色?

enter image description here

2 个答案:

答案 0 :(得分:0)

获取所有像素并逐个更改为您需要的颜色。

例如:

Bitmap bitmap= BitmapFactory.decodeResource(getApplicationContext().getResources(),R.drawable.yourRes);
myBitmap=immutableBmp.copy(Bitmap.Config.ARGB_8888, true);

int [] pixels = new int [myBitmap.getHeight() * myBitmap.getWidth()];

myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());

for(int i = 0; i < pixels.length; i++)
{
    if(pixels[i] == Color.RED)
    {
        pixels[i] = Color.YELLOW;
    }
}

myBitmap.setPixels(pixels,0,myBitmap.getWidth(),0, 0, myBitmap.getWidth(),myBitmap.getHeight());

答案 1 :(得分:0)

我认为对于这个特定的图标,您可以使用谷歌的矢量资产并更改它的色调颜色。检查以下链接: https://developer.android.com/studio/write/vector-asset-studio.html#running