【发布时间】:2014-08-06 00:43:36
【问题描述】:
我在自定义视图中的画布上绘制了一条弧线,如下所示。 Paint 和 rectangle 是在 onDraw() 之外定义的,为了简单起见添加到那里。
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
RectF rectangle = new RectF(60f, 60f, 480f, 480f);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(0x40000000);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(120);
canvas.drawArc(rectangle, 225f, 315f, false, paint);
}
当我在 Galaxy Nexus 4.3 上运行此代码时,会出现以下伪影。
但在 Nexus 5 和 4.4.4 上运行时没有这样的伪影。
我仅通过 (225f, 315f) 等角度和其他一些角度观察到此类人工制品。大多数时候,圆弧的形状是正确的。
有没有办法避免这些伪影?
更新:我尝试使用setLayerType() 使用软件、硬件和无层。人工制品改变了它们的形式,但仍然存在。
【问题讨论】:
-
只是为了测试,创建后在您的视图上调用以下命令:
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);并查看问题是否仍然出现。可能是硬件加速问题。 -
@kcoppock 你打败了我 :)
-
@kcoppock 试过了。人工制品改变了它们的形状,但仍然存在。
-
这太奇怪了。如果您将
315f更改为314.98f,该错误就会消失。就是在那个点附近,事情变得不稳定。 -
想知道这是否发生在其他 4.3 设备中,以验证它是 Android 的错误还是由三星引入的。也很高兴知道它是否发生在早期版本中。
标签: android android-canvas android-custom-view