0

有人帮我理解 Android 中疯狂的 Canvas 类。它似乎不准确,我不太确定为什么参数是浮点值。例如,这是我要绘制的多边形,具有绝对点值:

       mPaint.setStyle(Paint.Style.STROKE);
       mPaint.setColor(Color.RED);
       mPaint.setAntiAlias(false);
       mPaint.setDither(false);
       mPaint.setFilterBitmap(false);

       Path path1 = new Path();
       path1.moveTo(151, 100);
       path1.lineTo(200, 200);
       path1.lineTo(100, 151);
       path1.lineTo(200, 151);
       path1.lineTo(100, 201);
       path1.lineTo(151, 100);
       //   So that these points constitute a closed polygon  
       path1.setFillType(Path.FillType.EVEN_ODD);
       mPaint.setStyle(Paint.Style.FILL);
       mPaint.setColor(Color.GRAY);
       //   Draw the polygon  
       mCanvas.drawPath(path1, mPaint);

当我使用 Windows GDI 在 Windows 中运行类似的代码时,它准确地指出了要点。然而,在android中,有两个问题:

1)即使我关闭了抗锯齿,这条线似乎也有抗锯齿(灰线周围有黑色像素)。2)它并不总是达到指定的点。有时会,有时不会

为了更接近我想要的点,我必须这样做:

       Path path1 = new Path();
       path1.moveTo(151, 100-1);
       path1.lineTo(200+1, 200+1);
       path1.lineTo(100-1, 151);
       path1.lineTo(200+2, 151);
       path1.lineTo(100, 201);
       path1.lineTo(151+1, 100);

我无法弄清楚这里的规则,也不知道它在做什么,这太奇怪了。

4

1 回答 1

1

这不像你所说的 Path 类而不是 Canvas。现在我建议你将 dither 设置为 true mPaint.setDither(true),请允许我引用 dither 方法:

setFlags() 的助手,设置或清除 DITHER_FLAG 位抖动会影响比设备精度更高的颜色如何被下采样。没有抖动通常更快,但精度更高的颜色会被截断(例如 8888 -> 565)。抖动尝试分配此过程中固有的错误,以减少视觉伪影。

换句话说,它告诉您解析颜色可能存在问题。因此,这可能是导致您出现问题的原因。

于 2012-06-22T00:30:29.080 回答