2016-07-13 46 views
2

它看起來像mPaint.setShadowLayer()會干擾mPaint.EmbossMaskFilter()指令。我不能同時爲我的繪畫設置,因爲畫布上沒有繪製任何東西。Android Paint EmbossMaskFilter與setShadowLayer衝突

mPaintRing = new Paint(); 
mPaintRing.setFlags(Paint.ANTI_ALIAS_FLAG); 
mPaintRing.setColor(colorGold); 
mPaintRing.setDither(true); 
mPaintRing.setShadowLayer(3,0,15,colorBackShadow); 
mPaintRing.setStyle(Paint.Style.STROKE); 
mPaintRing.setMaskFilter(new EmbossMaskFilter(new float[]{0, 1, 1},0.7f, 6.0f, 7.5f)); 

這是預期的行爲,錯誤還是我錯過了什麼?我正在使用帶有minSDK 11的appcompat 7.23.14來構建M。

回答

0

解決方法是使用另一個具有相同外輪廓形狀和位置的繪圖,且該繪圖具有陰影層但沒有浮雕,並且事先繪製它畫浮雕的。爲了避免可能出現的反鋸齒僞影,繪畫應該有一個透明的顏色屬性。

0

試試這個代碼在Paint上應用EmbossMaskFiltersetShadowLayer財產。這工作完美。

mPaintRing.setShadowLayer(3,0,15,Color.Black); 
mPaintRing.setMaskFilter(null); 
canvas.drawText(mPaintRing.getText, 0, 0, mPaintRing); 

mPaintRing.clearShadowLayer(); 
mPaintRing.setMaskFilter(new EmbossMaskFilter(new float[]{0, 1, 1},0.7f, 6.0f, 7.5f)); 
canvas.drawTextOnPath(mPaintRing.getText, 0, 0, mPaintRing); 

如果他們仍然有些問題在這裏問,或者告訴我你的整個代碼我會幫助他們。

+0

這實際上與我的解決方法幾乎相同 - 繪製對象兩次。但就我而言,我只是預先定義了2種不同的塗料。 您的方法可能適用於靜態繪圖,但在onDraw中爲動畫自定義視圖更改繪畫可能太昂貴。 – halxinate