2010-03-08 68 views
16

我用下面的代碼的onDraw中繪製一個自定義視圖機器人Paint.setShadowLayer()VS Canvas.drawbitmap()的問題

Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 
p.setShadowLayer(3,3,3,0xff000000); 
Bitmap bmp = BitmapFactory.decodeResource(some drawable jpg); 
canvas.drawBitmap(bmp,null,new Rect(blah blah),p); 

的位圖和陰影看起來很滑稽。我的意思是好笑嗎?我的意思是,如果我調用canvas.drawRect(),我會得到不同的陰影。它看起來有點像android影子代碼將位圖視爲alpha通道或其他東西。

已嘗試添加p.setColor(0xff000000);和p.setStyle(Paint.Style.FILL);但沒有區別。

我想我可以在陰影上繪製Rect,然後用陰影關閉drawBitmap,但這看起來很愚蠢,因爲它會渲染像素兩次。

+4

在這種情況下:圖像說超過1000字。請添加截圖 – WarrenFaith

回答

-1

也許你應該有不同的Paint對象用於不同的目的,如文本,位圖等,所以一個人的設置不會影響其他人。

+0

我只做一個繪製操作,因此只有一個Paint對象。請重新閱讀我的問題和代碼。 – SteelBytes

2

基本上陰影層不適用於除文本以外的任何內容。這真是愚蠢。檢查Android hardware acceleration supported operations chart

2010年,當硬件加速視圖樹不存在的時候,這個問題被問到了。根據我讀過的東西,即使那時陰影層只適用於簡單形狀(如果有的話),其他人也變得很奇怪結果在任何文本上使用它。你可能不走運。

最後,有很多方法可以僞造陰影圖層。您可以將視圖包裝在另一個視圖中並在其下面繪製。您可以編寫一個視圖,將自己的陰影繪製爲徑向漸變等。但是,您可能只是想製作一個看起來像陰影並使用它的9patch。