令我驚訝,我才發現,原來的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 –