Android: Make specific (green) color in background image transparent

后端 未结 3 1537
一生所求
一生所求 2020-12-11 14:21

i am writing an app for Android.

in an xml file defining layout I have a TabHost with 6 Tabs, which all have the same big background image \"settingsdlg.gif\".

相关标签:
3条回答
  • 2020-12-11 14:49

    You would have to change every green pixel into a transparent one. Here is an example: How to change colors of a Drawable in Android?

    However if there are green pixels in the middle of the image then you can have a problem. So the other way is, if your image has constant size and shape, to create a mask and use xfer modes to create a new image with transparent rounded corners.

    0 讨论(0)
  • 2020-12-11 15:00

    This code snippet worked for me:

    PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(
        getResources().getColor(R.color.your_color),
        PorterDuff.Mode.MULTIPLY
    );
    imgView.getDrawable().setColorFilter(porterDuffColorFilter);
    imgView.setBackgroundColor(Color.TRANSPARENT);
    
    0 讨论(0)
  • 2020-12-11 15:01

    Just if anyone had the same problem, here is the code:

    //remove green edges from bg image
        Bitmap bgBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.settingsdlg)).getBitmap();
        Bitmap transparentBgBitmap = Utils.getBitmapWithTransparentBG(bgBitmap, Color.GREEN);
        tabHost.setBackgroundDrawable(new BitmapDrawable(transparentBgBitmap));
    

    in Utils:

    public static Bitmap getBitmapWithTransparentBG(Bitmap srcBitmap, int bgColor) {
        Bitmap result = srcBitmap.copy(Bitmap.Config.ARGB_8888, true);
        int nWidth = result.getWidth();
        int nHeight = result.getHeight();
        for (int y = 0; y < nHeight; ++y)
          for (int x = 0; x < nWidth; ++x) {
        int nPixelColor = result.getPixel(x, y);
        if (nPixelColor == bgColor)
          result.setPixel(x, y, Color.TRANSPARENT);
          }
        return result;
    }
    
    0 讨论(0)
提交回复
热议问题