2013-02-26 104 views
2
/** 
* @param bitmap 
*   The source bitmap. 
* @param opacity 
*   a value between 0 (completely transparent) and 255 (completely 
*   opaque). 
* @return The opacity-adjusted bitmap. If the source bitmap is mutable it 
*   will be adjusted and returned, otherwise a new bitmap is created. 
*   Source : http://stackoverflow.com/questions/7392062/android- 
*   semitransparent-bitmap-background-is-black/14858913#14858913 
*/ 
private Bitmap adjustOpacity(Bitmap bitmap, int opacity) { 
    Bitmap mutableBitmap = bitmap.isMutable() ? bitmap : bitmap.copy(Bitmap.Config.ARGB_8888, true); 
    Canvas canvas = new Canvas(mutableBitmap); 
    int colour = (opacity & 0xFF) << 24; 
    canvas.drawColor(colour, PorterDuff.Mode.DST_IN); 
    return mutableBitmap; 
} 

使用adjustOpacity,我让ImageViewBitmap是半透明的。如何使位图透明?

Bitmap newBitmap = adjustOpacity(orignalBitmap, 10); 
view.setImageBitmap(newBitmap); 
view.setBackgroundColor(Color.WHITE); 

但是,Imageview显示更加黑暗之前不是白色。如何使用Bitmap制作半透明(白色背景)Imageview?

回答

0

试试这个,

newBitmap.setImageResource(android.R.color.transparent); 
+1

你的意思 view.setImageResource(android.R.color.transparent); – vingorius 2013-02-26 08:19:09

1

试试这个。还要注意的是setAlpha是在0-255范围

//bmp is your Bitmap object 

BitmapDrawable bd = new BitmapDrawable(bmp); 
bd.setAlpha(50); 

ImageView v = (ImageView) findViewById(R.id.image); 
v.setImageDrawable(bd); 
+0

谢谢,我的意思是,我想改变位图本身! – vingorius 2013-02-28 08:21:28

+0

@vingorius您应该更改问题标题,然后 – akaya 2013-02-28 13:09:41

+0

谢谢@kaya,我会的。 – vingorius 2013-03-04 02:37:55

6
// Convert transparentColor to be transparent in a Bitmap. 
public static Bitmap makeTransparent(Bitmap bit, Color transparentColor) { 
    int width = bit.getWidth(); 
    int height = bit.getHeight(); 
    Bitmap myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    int [] allpixels = new int [ myBitmap.getHeight()*myBitmap.getWidth()]; 
    bit.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(),myBitmap.getHeight()); 
    myBitmap.setPixels(allpixels, 0, width, 0, 0, width, height); 

    for(int i =0; i<myBitmap.getHeight()*myBitmap.getWidth();i++){ 
    if(allpixels[i] == transparentColor) 

       allpixels[i] = Color.alpha(Color.TRANSPARENT); 
    } 

     myBitmap.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight()); 
     return myBitmap; 
} 

上面的代码将采取一个位图,并返回一个位图,其中每一个所述颜色是transparentColor像素是透明的。这在低至8级的API中工作,并且我还没有在任何更低的级别上进行测试。

我通常使用类似Color.RED的东西来制作我的透明像素,因为我的资产中没有使用大量的红色,但是如果我这样做是自定义的红色。

0

@ akaya的答案是正确的方式,除了构造函数已被弃用。因为API 4的新方法是使用:

BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap); 
drawable.setAlpha(100);