2013-10-03 74 views
3

在我的android應用程序中,我想繪製兩個圖像 - img1和img2。起初,我會在Canvas上畫img2。之後,我將在Canvas上繪製img1,這將與img2重疊,並且img1包含透明部分。問題是,img1的透明部分以黑色顯示,但我希望,img1的重疊透明區域應顯示img2的區域。我無法做到這一點。 請幫我解決這個問題。 謝謝。畫布顯示黑色的位圖的透明部分 - Android

代碼:

protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Bitmap b = BitmapFactory.decodeResource(getResources(), 
       R.drawable.white_bg); //img2 
     canvas.drawBitmap(b, 0, 0, null); 
     canvas.save(); 

     canvas.drawBitmap(realImage, 0, 0, null); //img1 
    } 

回答

0

在我的代碼中進行了一些修改後,我得到了我的輸出。這是我使用的代碼。

public class FrameView extends View{ 

    Bitmap bitmap = null; 

    public FrameView(Context context) { 
      super(context); 
      this.context = context; 

     } 

     public FrameView(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      bitmap = Bitmap.createBitmap(this.screenWidth, this.screenHeight, 
        Bitmap.Config.ARGB_8888); 

     } 

     public FrameView(Context context, AttributeSet attrs, int defStyle) { 
      super(context, attrs, defStyle); 
      this.context = context; 
     } 

    @Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      if (isTouchGestures) { 
       invalidate(); 
       mImgDrawables.get(0).draw(canvas); 
       canvas.drawBitmap(bitmap, 0, 0, null); 
      } 

     } 

    //this function is invoked from my activity which is using this view 
    public void setFrame(int frame) { 

      bitmap = BitmapFactory.decodeStream(getResources().openRawResource(
        frame)); 

      bitmap = Bitmap.createScaledBitmap(bitmap, this.screenWidth, 
        this.screenHeight, true); 

     } 
    } 
0

使用油漆對象來設置透明度alpha通道。

Paint alphaChannel = new Paint() 
alphaChannel.setAlpha(100) // set alpha to 100 for complete transparent 
canvas.drawBitmap(b, 0, 0, alphaChannel); 
+0

好的..我會嘗試你的代碼。 – zanky

+0

我試過了,但它使整個位圖透明。我希望我的位圖的透明區域能夠正確顯示。現在,該區域顯示爲黑色。 – zanky

+2

完全透明度爲0,而不是100.完全可見性結果來自alpha = 255。 –

2

加載位圖後嘗試bitmap.setHasAlpha(true)