Android:使背景图像中的特定(绿色)颜色透明

时间:2011-03-01 14:43:20

标签: android image background replace transparent

我正在为Android编写应用程序。

在一个定义布局的xml文件中我有一个带有6个标签的TabHost,它们都有相同的大背景图片“settingsdlg.gif”。

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background="@drawable/settingsdlg" >
..

在styles.xml中,我指定窗口必须是透明的:

<resources>
    <style name="my_app_style"  parent="@android:style/Theme.Dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

问题是背景图像“settingsdlg.gif”是圆形矩形,边缘的小区域(应该是透明的)是绿色的。

我知道要在Android上使用图像透明度,图像必须是PNG格式,我想透明的像素应该在PNG中保存为透明。

不幸的是我从数据库中获取图像并且无法更改它们,因为它们也用于Win32和Mac的其他应用程序。

有没有办法告诉Android在背景图像中绿色像素应该呈现透明?

谢谢!

3 个答案:

答案 0 :(得分:1)

您必须将每个绿色像素更改为透明像素。以下是一个示例:How to change colors of a Drawable in Android?

但是,如果图像中间有绿色像素,则可能会出现问题。所以另一种方法是,如果您的图像具有恒定的大小和形状,则创建一个蒙版并使用xfer模式创建一个具有透明圆角的新图像。

答案 1 :(得分:1)

如果有人遇到同样的问题,请输入以下代码:

//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));
在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;
}

答案 2 :(得分:1)

此代码段对我有用:

PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(
    getResources().getColor(R.color.your_color),
    PorterDuff.Mode.MULTIPLY
);
imgView.getDrawable().setColorFilter(porterDuffColorFilter);
imgView.setBackgroundColor(Color.TRANSPARENT);