Ich habe eine 3x3 Rasteransicht. Stellen Sie sich vor wie unten.
%Vor%JETZT WAS ICH MÖCHTEN
Ich möchte, dass sich die Spalte der Rasteransicht bei Berührung nach oben und unten verschiebt.
Betrachten Sie die erste Spalte einer Rasteransicht. Das ist
%Vor%Nun, wenn ich irgendwo in dieser Spalte berühre, entweder auf 1 oder auf 4 oder auf 7 und wische in irgendeine Richtung wie oben oder unten. Dann möchte ich die Spalte um 1 oder 2 Stellen verschieben.
Lassen Sie mich das klarstellen
Wenn ich nach oben wische, durch Berührung auf 7. Es sollte so aussehen
%Vor%Oder: Wenn ich die zweite Spalte berühre und sie in die untere Richtung verschiebe, sieht sie wie folgt aus:
%Vor%Und wenn ich die Spalte für 2 Rasterzellen verschiebe, sieht es wie
aus %Vor%Für jede Spalte sollte ich in der Lage sein, die Spalte um eine oder zwei Zellen zu verschieben, je nachdem, wie oft ich die Spalte scrolle.
Noch eine Sache Wenn ich die Spalte wenig scrolle und wenn es nicht genau zu irgendeiner Gitterzelle an der gewünschten Position passt, sollte es automatisch an die Gitterzelle passen, die nahe an die Position passt.
Ich habe zu viele Fragen hier auf Stapelüberlauf und frage ein Google-Los. Aber ich bekomme nicht, was ich genau will.
Wenn ich es nicht gut erklärt habe, dann sag es mir. Ich werde versuchen, mehr zu erklären. Jede Idee, jeder Hinweis oder jeder Trick wäre nennenswert.
BEARBEITEN
Wenn ich die Spalte um mehr als drei Raster verschiebe, verschiebt sich die Spalte beim Loslassen der Berührung auf nur zwei Elemente . Genau so
%Vor%Jede Idee zum Anpfiff wird spürbar
seinDanke
Um das zu tun, was du verlangst, musst du die Leinwand von GridView
übernehmen, den Bereich von der zu berührenden Spalte nehmen und deine eigene Zeichnung für das Ziehen, Schleudern usw. machen. Sobald die Bewegung abgeschlossen ist, wirst du Sie müssen die Ansichten in der Spalte über GridView
anpassen, um die Buchhaltung sauber zu halten. Ich würde auf die Online-Dokumentation schauen, die die Ansichtsbewegung diskutiert. "Ziehen und Skalieren" wäre ein guter Anfang.
Bei diesem Ansatz wird es einige "gotchas" geben. Wenn Sie nur versuchen, dies als eine Technik zu lernen, würde ich sagen, dass Ihre Vorgehensweise in Ordnung ist. Wenn Sie den Effekt erzielen und die zugrundeliegende Implementierung von GridView
wie vorgesehen verwenden möchten (Scrollen, Kanteneffekte, Umbrüche usw.), schlage ich einen anderen Ansatz vor.
Anstelle eines einzelnen 3x3 GridView
könnten Sie einen Schein von GridView
aufbauen, indem Sie drei 1x3 Rasteransichten nebeneinander ausrichten. (Die Rasteransichten sind 1x11, um die maximale Ausdehnung der vertikalen Objektträger zu berücksichtigen.) Jede Rasteransicht kann von einem einzelnen Adapter unterstützt werden, wenn sie für die Unterstützung mehrerer Rasteransichten codiert ist. Da es sich bei jeder Spalte um eine eigene Rasteransicht handelt, kann jede Spalte unabhängig von den anderen verschoben werden.
Der Vorteil dieses Ansatzes besteht darin, dass Sie den gewünschten Effekt erzielen, ohne die zugrundeliegende Klasse GridView
zu verzerren. Derselbe Ansatz kann Ihre vorhandene Methode verwenden, die eine Schaltfläche verwendet.
Ich hoffe, das ist hilfreich für Sie.
Ich war neugierig, was nötig wäre, um meinen Vorschlag umzusetzen. Im Folgenden finden Sie eine Beispiel-App mit der oben beschriebenen drei GridView
-Implementierung und einem Video desselben.
MainActivity.java
%Vor%GridViewAdapter.java
%Vor%activity_main.java
%Vor%Ich habe keinen Code-Block, aber ich kann erklären, wie Sie so Task
erreichen könnenSie müssen ein Gitter mit leeren Zellen wie diesem erstellen
ist - & gt; - - - - - - - - -
2. - & gt; - - - - - - - - -
3. - & gt; - - - - - - - - -
4. - & gt; - - - 1 2 3 - - -
5. - & gt; - - - 4 5 6 - - -
6. - & gt; - - - 7 8 9 - - -
7. - & gt; - - - - - - - - -
8. - & gt; - - - - - - - - -
9. - & gt; - - - - - - - - -
Jetzt wischen Sie nach oben, holen Sie sich alle Elemente der gleichen Spalte und gehen Sie dann nach oben
hoffe, diese Antwort erfüllt Ihre Anforderung
Tags und Links android android-layout touch android-gridview