2012-06-21 62 views
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类似的代码与Windows GDI,它钉点准确。然而,在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); 

我无法弄清楚这里的规则或它做什么那太奇怪了。

回答

1

这就像是Path类一样,而不是Canvas。现在,我建议你去抖动设置为true mPaint.setDither(true),请允许我引用抖动方法:

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

换句话说,它告诉你可能存在解析颜色的问题。 所以这可能是导致你问题的原因之一。