阴影层可与仿真器配合使用,但不适用于实际设备

Tsu*_*aze 7 android paint shadow

我正在创建一个自定义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);
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但它把相同颜色的阴影,我仔细检查了一切,我没有看到问题所在.我在星系纽带上测试它.但在模拟器上它工作得很好.

Leo*_*dos 12

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

不受支持的绘图操作

setShadowLayer():仅适用于文本

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

使用setLayerType将图层类型设置为单个视图,或关闭整个应用程序的清单中的加速.

  • 这确实是因为硬件加速.目前仅在文本上支持阴影.如果您需要在其他形状上投下阴影,则应在视图上使用软件图层. (4认同)