【问题标题】:Shadow layer work with the emulator but not on an actual device阴影层可与模拟器一起使用,但不能在实际设备上使用
【发布时间】:2013-03-11 14:36:33
【问题描述】:

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

这是我的代码的一部分:

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

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

【问题讨论】:

  • 这在我的三星 Note 上运行良好,但我正在扩展一个不可绘制的视图。您在更多设备上尝试过吗?

标签: android paint shadow


【解决方案1】:

我不确定,但这可能是因为硬件加速。 setShadowLayer 在视图加速时不起作用。尝试禁用整个应用程序的加速并检查。 Read this.

不支持的绘图操作

setShadowLayer():仅适用于文本

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

使用setLayerType 将图层类型设置为单个视图,或使用turn off acceleration in your manifest 设置整个应用。

【讨论】:

  • 确实是硬件加速的原因。目前仅文本支持阴影。如果您需要在其他形状上放置阴影,您应该在视图上使用软件层。
  • 何,我该怎么做?因为我不是这样的图形开发人员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多