2012-10-09 89 views
2

我想在現有的位圖上繪製一些東西,同時保持位圖分離。所以想法是有一個RelativeLayout和兩個ImageViews堆疊在一起,頂部的一個持有要繪製的位圖,最後一個持有帶有背景圖片的位圖。ImageView中的透明位圖

layout.xml(僅適用於相關的部分)

<RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
    <ImageView 
     android:id="@+id/photo_mask" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@android:color/transparent" /> 
    <ImageView 
     android:id="@+id/photo" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

layout.java(僅適用於相關的部分)

setContentView(R.layout.layout); 

ImageView image = (ImageView) findViewById(R.id.photo); 
image.setImageBitmap(mSomeImage); 

mMaskPaint = new Paint(); 
mMaskPaint.setColor(0xFF0000); 
mMaskPaint.setAlpha(128); 

mMaskBitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.ARGB_8888); 
mMaskBitmap.eraseColor(Color.TRANSPARENT); 

mMaskCanvas = new Canvas(mMaskBitmap); 
mMaskCanvas.drawCircle(64, 64, 10, mMaskPaint); 

ImageView mask = (ImageView) findViewById(R.id.photo_mask); 
image.setImageBitmap(mMaskBitmap); 

注意mSomeImage是128×128位圖,所以它會匹配掩碼位圖。 我正在繪製一個紅色的圓形在面具位圖中,這完美地顯示。但是,蒙版位圖不會顯示背景圖像,而是顯示黑色背景。

所以,我試圖:

  • 所述的ImageView的背景顏色設置爲透明
  • 掩碼位圖的透明使用.eraseColor
  • 設置位圖配置的像素設置爲ARGB_8888
  • 設置蒙版的alpha值ImageView

沒有一個看起來可行。當我做一個eraseColor(Color.BLUE)時,背景是藍色的,中間是紅色圓圈。當我設置蒙版ImageView的Alpha時,背景仍然是黑色。當我註釋掉setImageBitmap(mMaskBitmap)時,背景圖像顯示出來。

我在這裏錯過了什麼?

+0

嘗試設置ImageView的面具背景爲null,看看它是否工作。 – Wenhui

+0

你爲什麼要擦掉透明色?它看起來像掩碼位圖需要用紅色圓圈透明。我的猜測是像素的默認值是ff000000 - 這是黑色的。儘量不要擦除透明度。 – toadzky

+0

eraseColor方法實際上使用該顏色填充位圖。 –

回答

2

你的背景是錯誤的。更改

ImageView mask = (ImageView) findViewById(R.id.photo_mask); 
image.setImageBitmap(mMaskBitmap); 

ImageView mask = (ImageView) findViewById(R.id.photo_mask); 
mask.setImageBitmap(mMaskBitmap);