2017-05-28 3 views
8

Ich habe eine scrollbare GridView, wo die Elemente eine anständige Menge an Leerraum zwischen ihnen haben. für einige der Objekte im Raster möchte ich Pfeilbilder hinzufügen, die von einem zum anderen führenHinzufügen von Ansichten zwischen Elementen in GridView

Für Verweis auf, was ich meine, denke an die Talentbäume von World of Warcraft (http://calculators.iradei.eu/talents/mage). Du wirst sehen, dass einige der Talente Pfeile von einem Gegenstand zum nächsten führen.

Das Layout ich nur tun habe enthält eine Gridview in einem framelayout, sonst nichts

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <GridView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:numColumns="4" 
     android:scrollbars="none" 
     android:id="@+id/talent_tree_grid_view"> 
    </GridView> 

</FrameLayout> 

Ich versuche, diese ImageViews in Code zu schreiben, ich glaube nicht, dass es eine Möglichkeit ist I könnte diese Logik in den Adapter für das GridView hinzufügen.

Ich habe versucht, sie als Kinder der Eltern Zugabe FrameLayout, bezogen auf die x- und y-Koordinaten der Gridview-Elemente, und das funktioniert, aber wenn das Gridview Scrollen, die Pfeile auch nicht scrollen

I habe auch versucht, sie direkt als Kinder der GridView hinzufügen, aber es unterstützt dieses Verhalten nicht (es wirft java.lang.UnsupportedOperationException)

Gibt es irgendwelche Ideen, wie ich diese Bildansichten zwischen den Gridview-Elemente hinzufügen konnte?

+0

Vielleicht möchten Sie GridLayout erweitern und Ihre eigene Zeichnung hinzufügen – F43nd1r

+0

eine Sache, die Sie tun können Sie das Pfeilbild in Ihrem Gridview Element hinzufügen und zeigen sie immer wenn bestimmte Bedingungen treffen, aber ich werde nicht viel angemessen sein. –

+0

Ich habe meine Antwort um ein Demo-Projekt aktualisiert. – Cheticamp

Antwort

5

Das klingt sehr ähnlich zu Romain Guy "Regale" App, wo eine benutzerdefinierte GridView verwendet wird und das Hintergrundbild eines Bücherregal scrollt. Werfen Sie einen Blick auf das Projekt here. Die Quelle für die benutzerdefinierte GridView befindet sich in der Datei ShelvesView.java im Quellcode. Ein schnelles Intro von Guy Romain ist here;

Für die Pfeile können Sie eine 9-patch drawable betrachten.


Ich habe den obigen Ansatz ein wenig untersucht und eine Beispielanwendung auf Googles Hello GridView example Basis haben.

dieses Beispiel app machen, ich habe eine benutzerdefinierte Gridview (DogsGridView.java) gebaut und angeschlossen, um die Fotos über leere Zellen ähnlich wie Ihr Beispiel von World of Warcraft Talentbäumen. Ich benutze nur einfache Linien, aber die Klasse kann geändert werden, um Zellen mit Pfeilen oder einer anderen Grafik zu verbinden.

Hier ist ein quick video mit Verbindungslinien. Hier ist another mit 9-Patch-Pfeilen.

Das Projekt Quelle kann here finden.

+0

Vielen Dank für Ihre Antwort Cheticamp! Es funktionierte, aber ich hatte Leistungsprobleme, beim Scrollen, da die Verbindungspfeile ständig wird neu gezeichnet wurden ich denke? Ich kann am Ende eine Lösung implementieren, die die Stücke der Pfeile innerhalb der Elemente der Gitterdarstellung beinhaltet Zeichnung (die framelayouts in meinem Fall sind). So ist der Punkt, von dem der Pfeil ausgeht, den ersten Teil des Pfeils haben würde, würde keine leeren Rasterabstände zwischen mittleren Abschnitten haben, und die endgültige Gitterpunkt, wo die Pfeilenden den Endpunkt des Pfeils haben würde. Ich werde diese Antwort hier posten, wenn ich es richtig funktioniere. – Dportology

+0

@Dportology Ich weiß nicht, wann Sie die Quelle gezogen haben, aber ich habe gestern einige Leistungsverbesserungen gemacht, indem ich einen Aufruf des Super von 'dispathDraw' aus der Unterprüfungsschleife genommen habe. Ich habe danach eine deutliche Verbesserung meines Emulators gesehen. Anstatt die Grafik aufzuteilen und sie in die Rasteransichtselemente zu verschieben, sollten Sie in Betracht ziehen, die maximale Grafik einmal innerhalb der benutzerdefinierten GridView-Grafik zu zeichnen und sie dann nach Bedarf zu beschneiden und zu kopieren. – Cheticamp

+0

@Dportology Die Pfeile wurden wegen der Art und Weise, wie ich die Schleife gemacht habe, mehrfach gezeichnet. Ich habe die Suche geändert, um Spalten anstelle von Zeilen nach unten zu folgen, also sollte dies viel besser funktionieren. Jede sichtbare Position sollte nur einmal betrachtet werden. GitHub hat die Updates. – Cheticamp

Verwandte Themen