Zoomlayout: Holen Sie sich zeichnerische Koordinaten

Erstellt am 15. Feb. 2019  ·  10Kommentare  ·  Quelle: natario1/ZoomLayout

Hi,

Vielen Dank für die harte Arbeit in diese erstaunliche Bibliothek. Ich bin mit dem Ergebnis und der API ziemlich zufrieden, aber ich möchte die X- und Y-Koordinaten des Drawables im ZoomImageView erhalten, da ich einige Kreise über dem ZoomImageView zeichne und ich möchte, dass sie sich mit dem Drawable bewegen (auch nach Zoom). Denken Sie an das Problem, da Sie eine Karte (ZoomImageView) haben und darüber hinaus einige Pins haben, die die gleiche relative Position beibehalten müssen, wenn der Benutzer ein- oder auszoomt oder die Ansicht schwenkt. Jede Hilfe wäre sehr dankbar.

Dankeschön.

question stale

Hilfreichster Kommentar

Markus hat recht, aber statt zoom solltest du sicherheitshalber realZoom .

Sie benötigen also entweder panX oder panX * realZoom (oder abzüglich dieser, je nach Ihren Berechnungen). Es hängt davon ab, wie Sie diese zeichnen.

Je nachdem, wie Sie zeichnen, müssen Sie möglicherweise auch andere Dinge berücksichtigen, z. B. die Bildschirmgröße / Containergröße. Am Ende ist es ein reines mathematisches Problem, stellen Sie nur sicher, dass Sie verstehen, was panX und panY sind.

Sie können auch engine.addListener() , um Rückrufe zu empfangen.

Alle 10 Kommentare

Sie erhalten die Koordinaten mit getPanX und getPanY .

Sie erhalten die Koordinaten mit getPanX und getPanY .

Dies würde funktionieren, aber beim Schwenken wird der Zoomfaktor nicht berücksichtigt. Ich glaube, das Koordinatensystem wird beim Vergrößern verstärkt. Gibt es eine andere Möglichkeit, dies in Bezug auf Zoom und Skalierungsfaktor zu tun?

Ich denke, Sie können es einfach mit der Eigenschaft zoom multiplizieren.

Ich denke, Sie können es einfach mit der Eigenschaft zoom multiplizieren.

Da der Zoom nicht genau ist und die Multiplikation den Zoom-Mittelpunkt (wo der Pinch stattfindet) nicht berücksichtigt, werden alle Koordinaten basierend auf der Standardposition des Pivots linear übersetzt. Ich habe versucht, den Drehpunkt X und Y auf die Klemmposition zurückzusetzen, aber ich hatte kein Glück.

Warum ist der Drehpunkt des Pinchs wichtig, wenn die Ansichten über dem Zoom-Layout eine feste Position relativ dazu haben? Sollte es nicht ausreichen, die Ansichten wie beim Zoom-Layout-Schwenken nach oben zu verschieben, aber umgekehrt? Wenn das Zoom-Layout eingezoomt ist (dh Zoom > 1), müsste die Verschiebung der oberen Ansichten dann geringer sein als die ursprüngliche Pixelgröße, da die Zoom-Layout-Koordinaten, wie Sie sagten, verstärkt werden (von meinem Kopf aus). würde denken, dass Sie nur den Schwenk durch den Zoomfaktor teilen müssen).

Warum ist der Drehpunkt des Pinchs wichtig, wenn die Ansichten über dem Zoom-Layout eine feste Position relativ dazu haben? Sollte es nicht ausreichen, die Ansichten wie beim Zoom-Layout-Schwenken nach oben zu verschieben, aber umgekehrt? Wenn das Zoom-Layout eingezoomt ist (dh Zoom > 1), müsste die Verschiebung der oberen Ansichten dann geringer sein als die ursprüngliche Pixelgröße, da die Zoom-Layout-Koordinaten, wie Sie sagten, verstärkt werden (von meinem Kopf aus). würde denken, dass Sie nur den Schwenk durch den Zoomfaktor teilen müssen).

Bei Verwendung von Pan und Zoom werden die Pins des überlagerten Layouts (über dem zoomLayout) auf der Diagonalen als lineare Transponierung transponiert. Was ich hier sagen möchte ist, dass Sie manchmal an einer Position klemmen, an der sich der Stift befindet, daher sollte letzterer überhaupt nicht transponieren, aber in meinem Fall bewegt sich das Multiplizieren oder Dividieren nur auf der Diagonale. Abgesehen von all dem muss diese Bibliothek meiner Meinung nach ein paar Callbacks hinzugefügt werden, wie zum Beispiel "onZoomUpdate -> zoom: Float" und "onViewPanUpdate -> float[x,y]"

Markus hat recht, aber statt zoom solltest du sicherheitshalber realZoom .

Sie benötigen also entweder panX oder panX * realZoom (oder abzüglich dieser, je nach Ihren Berechnungen). Es hängt davon ab, wie Sie diese zeichnen.

Je nachdem, wie Sie zeichnen, müssen Sie möglicherweise auch andere Dinge berücksichtigen, z. B. die Bildschirmgröße / Containergröße. Am Ende ist es ein reines mathematisches Problem, stellen Sie nur sicher, dass Sie verstehen, was panX und panY sind.

Sie können auch engine.addListener() , um Rückrufe zu empfangen.

Markus hat recht, aber statt zoom solltest du sicherheitshalber realZoom .

Sie benötigen also entweder panX oder panX * realZoom (oder abzüglich dieser, je nach Ihren Berechnungen). Es hängt davon ab, wie Sie diese zeichnen.

Je nachdem, wie Sie zeichnen, müssen Sie möglicherweise auch andere Dinge berücksichtigen, z. B. die Bildschirmgröße / Containergröße. Am Ende ist es ein reines mathematisches Problem, stellen Sie nur sicher, dass Sie verstehen, was panX und panY sind.

Sie können auch engine.addListener() , um Rückrufe zu empfangen.

Klingt gut ich werde es mal versuchen. Danke vielmals

@andromedcodes konnten Sie die korrekten zeichenbaren Koordinaten in ZoomImageView abrufen?

Folgendes habe ich versucht:

ZoomImageView imgScreen;
Matrix m = new Matrix(imgScreen.getImageMatrix());
        Drawable d = imgScreen.getDrawable();
        RectF drawableRect = new RectF(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        RectF viewRect = new RectF(0, 0, imgScreen.getWidth(), imgScreen.getHeight());
        m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
        m.invert(m);

        // Convert the points inside the image
        float[] points = new float[2];
        points[0] = event.getX(); //holds x coordinate of drawable
        points[1] = event.getY(); //holds y coordinate of drawable
        m.mapPoints(points);

Aber ich verstehe nicht, wie man die Pan- und Zoom-Werte dort einstellt. Jede Hilfe wäre dankbar. Vielen Dank

Dieses Problem wurde automatisch als veraltet markiert, da es in den letzten 20 Tagen keine Aktivität hatte. Es wird geschlossen, wenn innerhalb der nächsten sieben Tage keine Aktivität mehr stattfindet. Vielen Dank für Ihre Beiträge.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen