令我惊讶,我才发现,原来的drawLine和drawRect中不包括结束位置,即:画布的drawLine和drawRect不包括结束位置?
canvas.drawLine(100, 100, 100, 100, paint);
或
RectF rect = new RectF(100, 100, 100, 100);
canvas.drawRect(rect, paint);
不会画任何东西。
我的油漆定义如下:
Paint paint = new Paint();
paint.setAntiAlias(false);
paint.setStyle(Paint.Style.FILL);
return paint;
我试图定义我的涂料作为FILL_AND_STROKE,但它不会帮助。
Android的drawPaint()javadoc甚至没有列出stopX和stopY参数!
所以,如果我想画垂直线正好去从beginY到恩迪(含),我必须做到以下几点:
canvas.drawLine(constX, beginY, constX, endY + 1)
注意,我没加1到终点X位置,仅限于结束Y(xstays与我想要的垂直线相同)。
我的设备是HTC SENSE。
编辑:西蒙,你是对的,而不是问一个问题我刚刚试图分享我的惊喜感,Android不会做它的文档在基本绘图这样的基本情况下所说的,并确保我在路上没有犯任何愚蠢的错误。
为了让自己更清楚:drawRect中的Javadoc说:
涂料公共无效的drawRect(左浮动,浮动顶部浮动权,浮底,油漆涂料)
绘制使用指定的矩形的指定的油漆。该矩形将根据油漆中的样式进行填充或框定。
左 - 矩形的左侧被吸入
顶部 - 矩形的顶侧被吸入
右 - 矩形的右侧要绘制
底部 - 矩形的底侧被吸入
漆 - 用于绘制矩形
所以,写
canvas.drawRect(x1, y1, x2, y2)
当你想到一个矩形,其角在(X1,Y1); (x1,y2); (x2,y1)和(x2,y2)。
Android说:错!他们将在(x1,y1); (x1,y2-1); (x2-1,y1)和(x2-1,y2-1)。
对于那些好奇:设置画布剪裁:
canvas.clipRect(x1, y1, x2, y2)
然后试着画一个点:
canvas.drawPoint(x1, y1, paint);
和你在屏幕上的一个点。
然后尝试在对面的角落:出现
canvas.drawPoint(x2, y2, paint);
什么。在剩下的两个角落里也不会出现任何东西:
canvas.drawPoint(x1, y2, paint);
canvas.drawPoint(x2, y2, paint);
对你们来说仍然不奇怪?
所以得出的结论是,Android将权利和底部坐标作为排他性,这意味着,例如,写作时:
canvas.clipRect(x1, y1, x2, y2)
您将得到(x1,y1,x2-1,y2-1)的剪裁范围。 正确和底部坐标或Rect/RectF对象的每个方法也是如此。
这里有个问题吗?如果你想绘制一个点,然后使用:http://developer.android.com/reference/android/graphics/Canvas。html#drawPoint(float,%20float,%20android.graphics.Paint) –
这不是问题,但我很高兴它在这里。保存我做试验来找出这个问题的答案:http://stackoverflow.com/questions/3063892/canvas-clipping-rect-right-bottom-edge-inclusive –