8

我正在创建一个自定义可绘制对象(它从可绘制对象扩展)并且我正在尝试对其施加阴影效果。

这是我的代码的一部分:

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);
}

我不知道为什么,但它会产生相同颜色的阴影,我仔细检查了所有内容,但看不出问题出在哪里。我在银河系上对其进行了测试。但是在模拟器上它工作得很好。

4

1 回答 1

13

我不确定,但这可能是因为硬件加速。setShadowLayer如果视图加速则不起作用。尝试禁用整个应用程序的加速并检查。读这个。

不支持的绘图操作

setShadowLayer():仅适用于文本

使用软件层类型强制在软件中呈现视图。如果硬件加速的视图(例如,如果您的整个应用程序都是硬件加速的)出现渲染问题,这是一种解决硬件渲染管道限制的简单方法。

使用setLayerType将图层类型设置为单个视图或在清单中为整个应用关闭加速。

于 2013-03-14T10:22:35.187 回答