Trước sự ngạc nhiên của tôi, tôi vừa phát hiện ra rằng DrawLine và drawRect không bao gồm các vị trí kết thúc, tức là .:Bản vẽ và drawRine của Canvas không bao gồm vị trí kết thúc?
canvas.drawLine(100, 100, 100, 100, paint);
hoặc
RectF rect = new RectF(100, 100, 100, 100);
canvas.drawRect(rect, paint);
sẽ không rút ra bất cứ điều gì.
sơn My được định nghĩa như sau:
Paint paint = new Paint();
paint.setAntiAlias(false);
paint.setStyle(Paint.Style.FILL);
return paint;
tôi đã cố gắng xác định sơn của tôi như FILL_AND_STROKE, nhưng nó sẽ không giúp đỡ.
drawPaint() javadoc của Android thậm chí không liệt kê các thông số stopX và stopY!
Vì vậy, nếu tôi muốn vẽ một đường thẳng đứng mà đi chính xác từ beginY để Endy (bao gồm), tôi phải làm như sau:
canvas.drawLine(constX, beginY, constX, endY + 1)
Chú ý rằng tôi không thêm từ 1 tới kết thúc X vị trí, chỉ để kết thúc Y (xstays giống như tôi muốn một đường thẳng đứng).
Thiết bị của tôi là HTC SENSE.
Chỉnh sửa: Simon, bạn nói đúng, thay vì hỏi một câu hỏi tôi vừa cố gắng chia sẻ cảm giác ngạc nhiên rằng Android không làm những gì tài liệu của nó nói trong trường hợp cơ bản như bản vẽ cơ bản và đảm bảo rằng tôi đã không làm bất kỳ sai lầm ngu ngốc trên con đường của tôi.
Để làm cho bản thân mình rõ ràng hơn: javadoc drawRect cho biết:
public void drawRect (float trái, nổi hàng đầu, nổi đúng, trôi nổi dưới, sơn sơn)
Vẽ hình chữ nhật quy định sử dụng sơn được chỉ định. Hình chữ nhật sẽ được điền hoặc đóng khung dựa trên Kiểu trong sơn.
trái - Phía bên trái của hình chữ nhật được vẽ
đầu - Phía trên cùng của hình chữ nhật được vẽ
đúng - Phía bên phải của hình chữ nhật được vẽ
đáy - phía dưới cùng của hình chữ nhật được vẽ
sơn - các sơn dùng để vẽ rect
Vì vậy, khi viết
canvas.drawRect(x1, y1, x2, y2)
Bạn mong đợi một hình chữ nhật có góc là (x1, y1); (x1, y2); (x2, y1) và (x2, y2).
Android nói: sai! Họ sẽ ở (x1, y1); (x1, y2-1); (x2-1, y1) và (x2-1, y2-1).
Đối với những người tò mò: thiết lập cắt vải:
canvas.clipRect(x1, y1, x2, y2)
Sau đó cố gắng vẽ một điểm:
canvas.drawPoint(x1, y1, paint);
và bạn sẽ có được một điểm trên màn hình.
Sau đó thử ở góc đối diện:
canvas.drawPoint(x2, y2, paint);
gì xuất hiện. sẽ không có gì xuất hiện ở 2 góc còn lại:
canvas.drawPoint(x1, y2, paint);
canvas.drawPoint(x2, y2, paint);
Vẫn không có gì đáng ngạc nhiên cho bạn?
Vì vậy, kết luận là Android xử lý đúng và dưới cùng tọa độ là độc quyền, có nghĩa là ví dụ: khi viết:
canvas.clipRect(x1, y1, x2, y2)
Bạn sẽ nhận được các giới hạn cắt (x1, y1, x2 - 1, y2 - 1). Điều tương tự cũng xảy ra với mọi phương thức có các đối tượng phải và dưới cùng hoặc Đối tượng/đối tượng.
Có câu hỏi nào ở đây không? Nếu bạn muốn vẽ một điểm thì hãy sử dụng: http://developer.android.com/reference/android/graphics/Canvas.html # drawPoint (float,% 20float,% 20android.graphics.Paint) –
Đây không phải là một câu hỏi, nhưng tôi rất vui vì nó ở đây. Tiết kiệm cho tôi làm thử nghiệm để tìm ra câu trả lời cho câu hỏi khác này: http://stackoverflow.com/questions/3063892/canvas-clipping-rect-right-bottom-edge-inclusive –