Leinwand " drawLine und drawRect nicht einschließlich end-position?

Zu meiner überraschung habe ich gerade entdeckt, dass drawLine und drawRect beinhalten nicht die Endposition, D. H.:

canvas.drawLine(100, 100, 100, 100, paint);

oder

RectF rect = new RectF(100, 100, 100, 100);
canvas.drawRect(rect, paint);

nicht alles zeichnen.

Mein Lack ist wie folgt definiert:

Paint paint = new Paint();
paint.setAntiAlias(false);
paint.setStyle(Paint.Style.FILL);
return paint;

Habe ich versucht, die Definition meiner Farbe, wie FILL_AND_STROKE, aber es würde nicht helfen.

Android drawPaint() javadoc nicht einmal eine Liste der stopX und stopY params!

So, wenn ich will zeichnen Sie eine vertikale Linie, die geht genau von beginY zu endY (inklusive), habe ich Folgendes zu tun:

canvas.drawLine(constX, beginY, constX, endY + 1)

Merke, dass ich nicht fügen Sie 1, um das Ende der X-position, nur das Ende Y (xstays das gleiche wie, ich möchte eine vertikale Linie).

Mein Gerät ist HTC SENSE.

Edit: Simon, du hast Recht, anstatt eine Frage zu stellen ich habe einfach versucht, zu teilen, meinem Gefühl der überraschung, dass Android nicht das tun, was seine docs sagen, in einer so grundlegenden Fall als basic-Zeichnung, und stellen Sie sicher, dass ich das nicht machen dumme Fehler, die auf meinem Weg.

Mich klarer: drawRect die javadoc sagt:

public void drawRect (float left, float top, float right, float bottom, Paint Paint)

Zeichnen das angegebene Rechteck mit der angegebenen Farbe. Das Rechteck wird gefüllt oder umrahmt auf der Grundlage der Stil in der Farbe.

Links - auf Der linken Seite des Rechtecks gezeichnet werden

top - Die Obere Seite des Rechtecks gezeichnet werden

rechts - auf Der rechten Seite des Rechtecks gezeichnet werden

unten Die untere Seite des Rechtecks gezeichnet werden

malen - Das malen, zeichnen rect

So, beim schreiben

canvas.drawRect(x1, y1, x2, y2)

Erwarten Sie ein Rechteck, dessen Ecken in (x1, y1); (x1, y2); (x2, y1) und (x2, y2).

Android sagt: falsch! Sie werden zu (x1, y1); (x1, y2-1); (x2-1, y1) und (x2-1, y2-1).

Für die die neugierig sind: legen Sie die Leinwand clipping:

canvas.clipRect(x1, y1, x2, y2)

Dann versuchen zu zeichnen, einen Punkt:

canvas.drawPoint(x1, y1, paint);

und bekommen Sie einen Punkt auf dem Bildschirm.

Dann versuchen, in die gegenüberliegende Ecke:

canvas.drawPoint(x2, y2, paint);

nichts angezeigt. nichts wird angezeigt, die restlichen 2 Ecken sowie:

canvas.drawPoint(x1, y2, paint);


canvas.drawPoint(x2, y2, paint);

Immer noch nicht verwunderlich, dass Sie die Leute?

So die Schlussfolgerung ist, dass Android behandelt Recht und unten Koordinaten als exklusiv, was bedeutet, dass z.B. beim schreiben:

canvas.clipRect(x1, y1, x2, y2)

Erhalten Sie die clipping-Grenzen (x1, y1, x2 - 1, y2 - 1). Das gleiche geht mit jeder Methode, die Recht und unten Koordinaten oder Rect/RectF Objekte.

InformationsquelleAutor javaxian | 2012-01-22
Schreibe einen Kommentar