2012-05-02 33 views
5

我試圖達到與每個線程相同的結果: Make certain area of bitmap transparent on touch。 我堅持在這個答案中提供的代碼:Lumis answer和根據SteD這個解決方案應該工作。使某些區域的位圖透明觸摸 - >

不幸的是我不工作(也爲另一個用戶:Make certain area of bitmap transparent on touch doesn't works, it's draw a black circle),我只是變黑圈。 我嘗試了很多東西,但沒有得到解決。根據第二條線索的建議使背景透明沒有任何區別。

多次實驗後,我發現,透明度是工作,當我在AndroidManifest.xml中我設置此

android:theme="@android:style/Theme.Translucent" 

我可以看到我的應用程序,即桌面下的一切。 我經歷了許多次代碼,不能看到明顯的錯誤,只有我認爲的原因是因爲這是Z順序,但是位圖和畫布不維護z順序。 Z排序是通過以特定順序(在此代碼中是正確的)進行繪製完成的。

這是一些在android代碼優化的奇怪的例子,或者我失去了android清單文件中的東西?

回答

6

終於讓我找到解決方案,它的工作:

@Override 
public void onDraw(Canvas canvas){ 
    super.onDraw(canvas); 

    //draw background 
    canvas.drawBitmap(bgr, 0, 150, null); 
    //copy the default overlay into temporary overlay and punch a hole in it       
    c2.drawBitmap(overlayDefault, 0, 0, null); //exclude this line to show all as you draw 
    c2.drawCircle(X, Y, 80, pTouch); 
    //draw the overlay over the background 
    //canvas.drawBitmap(overlay, 0, 0, null); 

    Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/); 
    new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); 
    canvas.drawBitmap(overlay, 0, 0, new_paint); 
} 

但我不明白爲什麼在工作。我是調查xfermodes與此源代碼:android Xfermodes demo,並根據這一形象:Xfermodes image

它沒有任何意義,除了是xfermode確保覆蓋位圖是第二繪製豆(Z順序)和透明度來扮演。但是Z順序應該通過繪製順序來維持。

如果有人有更好的想法如何解決這個問題,請分享你的知識。

問候。

+0

Paint new_paint = new Paint(/ * Paint.ANTI_ALIAS_FLAG * /); new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); canvas.drawBitmap(overlay,0,0,new_paint); ================================================= = 是主要的東西,它解決了謝謝 – ViVekH

2

您可以編輯的onDraw()方法:

public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     canvas.drawColor(Color.TRANSPARENT); 
     canvas.drawBitmap(bgr, 0, 0, null); 

     c2.drawCircle(X, Y, 10, pTouch); 
     Paint new_paint = new Paint(/*Paint.ANTI_ALIAS_FLAG*/); 
     new_paint.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP)); 
     canvas.drawBitmap(overlay, 0, 0, new_paint); 
    } 

我試着和它的工作! 希望這個解決方案可以幫助你

+0

感謝兄弟..這幫了我.. –