2017-08-17 3 views
0

Ich weiß nicht, wie ich mein Problem erklären soll. Ich habe eine Ansicht von Figuren, die mit Leinwand erstellt wurden, und ich möchte die Leinwand vergrößern und verkleinern, wenn eine der Figuren an den Rand der Leinwand gesetzt wird. Ich werde einige Bilder hinterlassen, um mich besser auszudrücken.Vergrößern, Abmessungen von Cavans in Android vergrößern

If I add a new figure, it expands the canvas (color light blue) and I can move the canvas

and I zoom the canvas

Antwort

0

Sie werden schnell aus der Erinnerung Hexe solchen Architektur laufen (große Leinwand mit und nur einen Teil davon sehen).

Stattdessen Geometrie Elemente in einer Liste, mit Positionen/Größen, dann haben "Kamera-Ansicht" -Matrix, die zur Berechnung der tatsächlichen Koordinaten jedes Elements (eine solche Matrix können Sie alle Arten von Viewport-Aktionen, Bewegen, Skalieren, Drehen, sogar ein bisschen Verdrehen für Spaß).

Haben Sie eine Leinwand, die nur auf dem Bildschirm ist, und nur 1: 1 der Pixelgröße, d. H. Als Ziel-Ansichtsfensteroberfläche gezeichnet werden soll. Dann zieht jede Form, die nach der Umwandlung in diesen Bereich passt, in angemessenem Maßstab über die Leinwand.

Wenn Ihre Elemente vektorisierte Formen verwenden, bleiben sie auch bei hohen Zoomstufen scharf und scharf, während in diesem Fall die gesamte Leinwand bereits außerhalb der Speichergrenzen liegt.

Aber dabei können Sie auf verschiedene Art von Problem stoßen, mit der Leistung. Das erneute Zeichnen der Leinwand von Grund auf mit einer großen Anzahl von Elementen kann einige Zeit in Anspruch nehmen. Es gibt verschiedene Techniken, um das zu verbessern, ich glaube nicht, dass du jemals Tausende von Elementen haben wirst, also sollte das Aussortieren aller Elemente in Ordnung sein. Aber verschiedene Caches, einschließlich der Wiederverwendung von mehreren Canvas, um den endgültigen Bereich zu "kacheln", um die Bewegungsgeschwindigkeit zu verbessern, können implementiert werden.

Aber zuerst können Sie einfach die Leinwand mit umgewandelter Geometrie neu zeichnen, die Paint selbst wird bereits die Elemente ausschneiden, die außerhalb der Fläche nach der Transformation sind. Nachdem Sie diese Basislösung haben (und Sie den Code geschrieben haben, der Touch-Gesten in Ansichtsmatrix-Modifikationen übersetzt, anstatt das Layout zu scrollen), können Sie mit Leistung experimentieren, vielleicht wird der einfache Weg für Ihre Bedürfnisse schon ausreichen, ohne irgendwelche Tiling/Caching.

Vielleicht prüfen, wie 3D-Engines arbeiten, sie haben keine riesige Leinwand, aber sie zeichnen nur den sichtbaren Bereich auf dem Bildschirm, und sie transformieren die Geometrie zuerst in der Punktkoordinatenform, nicht in gerenderten Pixeln. Das Prinzip kann auch für 2D angewendet werden (es ist dasselbe, nur ohne 6DOF Rotationen und lineare Perspektive).