android中使用setStrokeWidth,线条增粗时的像素的变化

    最近学习android绘图,使用drawRect先画空心,然后用实心矩形填充,总会发现左边及上边比右边衣下边的线条粗了一圈。之前发现这和情况,将像素加减一下就行了,但总觉得不合适,因为每次加减的像素不一样,若调整界面,会导致重新计算像素大小。

    经过对几个像素的填充测试发现以下规律,假如绘制一个点为(10,10),线条宽度加到1时,点的宽度会向下方(或右方)加1,也就说将绘制 [10,11) 的区间。这样的表现就是点(10,10)被绘制,而点(10,11)(其它方向暂不算)则未被绘制,则表现为1个像素的点。

    从此基础上再加1时,因为绘制是基于像素的,像素是最小单位,无法拆分为0.5个像素,也就是说,此时只能向一个方向加1个像素。下方(或右方)的在从0到1时已经增加,为了保持平衡,像素将向反方向扩展,绘制区间将扩展到 [9,11)。

    依次类推,在不断交替中,发生如下规律,width=2时y1--,width=3时,y2++,width=4时y1-=2,width=5时,y2+=2,....这样,很明显可以得出,每次增加,偶数时,左范围减去width整除2的结果,奇数时,右范围加上width整除2的结果。这样绘制过程中可以精确自动变化。


你可能感兴趣的:(移动开发)