webentwicklung-frage-antwort-db.com.de

Verstehen, wie DrawRect oder das Zeichnen von Koordinaten in Android funktioniert

Ich versuche, ein Rechteck über eine Leinwand zu zeichnen, und ich bin mit Problemen konfrontiert, um die Tiefe der Rechteckzeichnung von Android zu verstehen. Ich habe Tutorials und alles Mögliche gelesen, aber ich bin festgefahren.

Hier im Bild ist das rote Rechteck mein Ziel .enter image description here

Unabhängig von der Größe eines Rechtecks ​​muss ich das rote Rechteck über der Basis und in der Mitte des Rechtecks ​​zeichnen. Der schlimmste Albtraum, dem ich gegenüber stehe, ist das Verstehen der Koordinaten X, Y Breite und Höhe.

Kann irgendjemand erklären, wie diese Mathematik funktioniert, manchmal gehen wir hinauf, Y erreicht sehr kleine, aber gleiche Breitenkoordinaten sind höher. Ich kann das rote innere Rechteck nie richtig rechtfertigen. In einigen Bildschirmen funktioniert es gut, in anderen kann es nicht funktionieren. Das rote Rechteck kommt manchmal aus dem übergeordneten Rechteck.

Agenda soll verstehen, wie die Koordinaten funktionieren und die Integrität des inneren roten Rechtecks ​​sicherstellen

Es wäre großartig, eine Erklärung anhand eines Beispiels zu erhalten. Ich benutze-

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

das Rechteck zeichnen 

23

X verläuft horizontal von links nach rechts. Y verläuft senkrecht von oben nach unten. Es ist genau das gleiche wie bei Ihren Grafiken. Also (0/0) ist oben links.

Wenn Sie "nach oben" gehen, wird Y natürlich kleiner, da es von oben nach unten wächst.

Sie müssen auf die Anordnung von Elementen wie ListViews achten, diese geben Ihren gezeichneten Ansichten eine partielle (oder neue, nicht zu erkennende) Leinwand. Diese Ansichten haben 0x0 an ihrer eigenen oberen/linken Position. Wenn Sie das Absolute benötigen, müssen Sie anschließend View.getLocationOnScreen() aufrufen und die Offsets selbst berechnen.

16
meredrica

canvas.drawRect(left,top,right,bottom,Paint);

In diesem 

  1. links: Abstand der linken Seite des Rechtecks ​​von der linken Seite der Leinwand

  2. top: Abstand der Oberseite des Rechtecks ​​von der Oberseite der Leinwand .__

  3. right: Abstand der rechten Seite des Rechtecks ​​von der linken Seite der Leinwand
  4. bottom: Abstand der unteren Seite des Rechtecks ​​von der oberen Seite der Leinwand.
30
Savan

Das wird Sinn machen.

float left = 100, top = 100; // basically (X1, Y1)

float right = left + 100; // width (distance from X1 to X2)
float bottom = top + 100; // height (distance from Y1 to Y2)

Somit

RectF myRectum = new RectF(left, top, right, bottom);
canvas.drawRect(myRectum, myPaint);
17
TheRealChx101

Hier ist mein Ansatz einfach und leicht

            int x = 100;  //position coordinate from left
            int y = 100;  //position coordinate from top
            int w = 100; //width of the rectangle
            int h = 100; //height of the rectangle
            drawRectangle(x, y, w, h, canvas, Paint);

und hier ist meine Funktion

    public void drawRectangle(int left, int top, int right, int bottom, Canvas canvas, Paint paint) {
    right = left + right; // width is the distance from left to right
    bottom = top + bottom; // height is the distance from top to bottom
    canvas.drawRect(left, top, right, bottom, Paint);
}

es funktioniert ziemlich gut

1
Harvinder Singh

Wünschen Sie meine Notiz als unten helfen Sie zu verstehen, dass die Relativitätstheorie Rect, Canvas und View gehört.

/**
 * Rect holds four integer coordinates for a rectangle.
 * The rectangle is represented by the coordinates of its 4 edges (left, top, right bottom).
 * These fields can be accessed directly. Use width() and height() to retrieve the rectangle's width and height.
 *
 * Note that the right and bottom coordinates are exclusive.
 * This means a Rect being drawn untransformed onto a Canvas will draw into the column and row described by its left and top coordinates
 * , but not those of its bottom and right.
 *
 * With regard to calling to Canvas#drawRect(left,top,right,bottom,Paint)
 *
 * left: Distance of the left side of rectangle from left side of canvas.
 * top: Distance of top side of rectangle from the top side of canvas
 * right: Distance of the right side of rectangle from left side of canvas.
 * bottom: Distance of the bottom side of rectangle from top side of canvas.
 * __________________________________
 *|
 *|
 *|   __l_______________________r__
 *|  |         view group A        |
 *| t|  0______________________w   |
 *|  |  | **** view group B *** |  |
 *|  |  | **** canvas of B **** |  |
 *|  |  | ********************* |  |
 *|  |  | ********************* |  |
 *|  |  | ********************* |  |
 *|  |  | ***** __________ **** |  |
 *|  |  | *****|## rect ##|**** |  |
 *|  |  | *****|##########|**** |  |
 *|  |  | *****|##########|**** |  |
 *|  |  | *****|##########|**** |  |
 *|  |  | *****|##########|**** |  |
 *|  |  | ***** ---------- **** |  |
 *|  |  | ********************* |  |
 *| b|  h-----------------------   |
 *|  |                             |
 *|  |                             |
 *|   -----------------------------
 *|
 * -----------------------------------
 *
 * 1. l, t, r, b are coordinates of view group B (PastryChart) relative to view group A (parent of PastryChart).
 * 2. The size of canvas of B is same as the size of the view group B
 *    , which means canvas of B is a canvas which the view group B is rendered to.
 * 3. The coordinates of rect is relative to a canvas, here is the canvas of B
 *    , which means the coordinates of rect going to represent child of view group B are relative to the canvas of B.
 *    ex. for a rect holding left = 0, the position of its left is located on the same position of the left of view group B
 *    ex. for a rect holding right = w, the position of its right is located on the same position of the right of view group B
 *    ex. for a rect holding top = 0, the position of its top is located on the same position of the top of view group B
 *    ex. for a rect holding bottom = h, the position of its bottom is located on the same position of the bottom of view group B
 * 4. The rect is used to stored the child measurement computed in measure pass
 *    for forward positioning child view (PastryView) in the layout pass taken by parent view (PastryChart).
 * 5. All of them are in pixels (px)
 */
0
牟家宏