2013-03-11 45 views
6

我創建了一個自定義drawable(它從Drawable延伸),我試圖在它上面放置一個陰影效果。陰影層與模擬器一起工作,但不在實際設備上

這裏是我的代碼的一部分:

public void draw(Canvas canvas) { 
    Path path = new Path(); 
    path.moveTo(0, 0); 
    path.lineTo(0, Y/2); 
    path.lineTo(X/2, Y); 
    path.lineTo(X, Y/2); 
    path.lineTo(X, 0); 
    path.lineTo(0, 0); 
    Paint paint = new Paint(); 
    paint.setColor(context.getResources().getColor(R.color.red_dark)); 
    paint.setStyle(Style.FILL_AND_STROKE); 
    paint.setStrokeWidth(2f); 
    paint.setShadowLayer(1, 0, 10f, context.getResources().getColor(R.color.black)); 
    canvas.drawPath(path, paint); 
} 

我不知道爲什麼,但它把一個影子用相同的顏色,我仔細檢查了一切,我不明白問題出在哪裏。我在星系聯繫上測試它。但在模擬器上它工作得很好。

+0

這工作正常我的三星注意,但我擴展視圖不可繪製。你有更多的設備嘗試過嗎? – Lumis 2013-03-19 09:11:42

回答

10

我不確定,但這可能是因爲硬件加速。如果視圖加速,則setShadowLayer不起作用。嘗試禁用整個應用程序的加速並檢查。 Read this.

不支持的繪圖操作

setShadowLayer():接受文本僅

使用一個軟件層類型來強制軟件渲染視圖。如果硬件加速的視圖(例如,如果整個應用程序硬件加速),則會導致渲染問題,這是解決硬件渲染管道限制的簡單方法。

使用setLayerType設置爲整個應用程序層型個人觀點或turn off acceleration in your manifest

+4

確實是因爲硬件加速。目前僅在文本上支持陰影。如果您需要在其他形狀上放置陰影,則應在視圖上使用軟件層。 – 2013-03-19 21:02:14

+0

何,我該怎麼做?因爲我不是這樣的圖形開發人員。 – Tsunaze 2013-03-21 08:24:32

+0

更新了答案。 – Leonidos 2013-03-21 09:18:35

相關問題