Ich möchte eine einfache Steuerung durchführen: einen Container mit Blick nach innen. Wenn ich den Behälter berühre und den Finger bewege, möchte ich die Ansicht verschieben, um meinem Finger zu folgen.
Welche Art von Container (Layout) soll ich verwenden? Wie macht man das?
Ich brauche keine Oberfläche, sondern ein einfaches Layout.
Antworten:
Etwas wie das:
In
main.xml
nurRelativeLayout
mit@+id/root
quelle
layoutPrarms.rightMargin = -250
und das gleiche mitbottomMargin
!! Kannst du es erklären? Trotzdem vielen Dank !!Ich habe einen einfachen Ansatz gefunden, um dies mit dem ViewPropertyAnimator zu tun:
quelle
setX
undsetY
direkt verwenden, anstatt eine Animation der Dauer 0Wenn Sie nach dem @ Andyrey-Ansatz die Ansicht von ihrer Mitte aus verschieben möchten, müssen Sie nur die halbe Höhe und Breite der Ansicht von der Bewegung abziehen.
quelle
Gleiche Implementierung in Kotlin
quelle
Berühren Sie den Behälter und die Ansicht folgt Ihrem Finger.
XML-Code
Java-Code
quelle
Ich empfehle, view.translationX und view.translationY zu verwenden, um Ihre Ansichten zu verschieben.
Kotlin-Snippet:
quelle
Erstellen Sie eine benutzerdefinierte Touch-Listener-Klasse (in Kotlin):
(Dieser Code verhindert, dass Ihre Ansicht aus der übergeordneten Ansicht herausgezogen wird.)
Wie benutzt man es?
parentView
ist das übergeordnete Element Ihrer Ansicht.quelle
Im folgenden Code habe ich etwas namens
RegionView
( git) erstellt ) erstellt, einen wiederverwendbaren Container, der für die Verwaltung von Drag & Zoom-Vorgängen für jedes seiner verschachtelten untergeordneten Elemente verantwortlich ist.Hier manipulieren wir die
top
undleft
Koeffizienten eines KindesView
,LayoutParams
um die Bewegung um das Diagramm zu simulieren. Indem wir die Interpretation der Handhabung entkoppeln, die als Drag-Operation verstanden wird und als Scale-Operation bestimmt wird, können wir ein Kind zuverlässig manipulierenView
.Hier zeige ich einen Anwendungsbeispiel:
quelle
Die von @Vyacheslav Shylkin bereitgestellte Lösung wurde etwas geändert, um Abhängigkeiten von manuell eingegebenen Zahlen zu entfernen.
quelle
In diesem Beispiel können Sie die Ansicht innerhalb der übergeordneten Grenzen verschieben, unabhängig von Größe, fehlerfreier Animation und Fangklicks.
Der Grund, warum diese Lösung anderen Kommentaren überlegen ist, besteht darin, dass dieser Ansatz ein Richtungsfeld verwendet, das sich selbst berechnet und nicht an die Ansichtspositionen weiterleitet, was die Ursache für viele Fehler ist.
Wenn sich der Container in einer ScrollView oder einer zweidimensionalen ScrollView befindet, sollten Sie diese Zeile zum onTouch hinzufügen
quelle
Genau wie bei @ Alex Karshins Antwort ändere ich mich ein bisschen.
quelle