2013-03-11 73 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

相关问题