Die Albumansicht in iTunes hat einen glatten Effekt, bei dem der Albumtitel und die Cover-Art jederzeit im Blickfeld sind. Wenn Sie den Bildschirm nach unten rutschen, bleiben sie am oberen Rand des Bildschirms hängen, bis sie auf das nächste Album stoßen und dann wegrutschen.
Beachten Sie, dass das oberste Album immer noch vollständig sichtbar ist, obwohl der Benutzer einen Bildlauf durchgeführt hat.
Wie heißt dieses Steuerelement oder dieser Effekt? Ich habe mit Leerzeichen versucht, Google dafür zu suchen.
Wie kann ich das in JavaFX machen? Ich möchte dies in meiner Java-basierten GUI nachahmen. Kann TableView dies oder vielleicht ein Drittanbieter-Steuerelement tun?
Am einfachsten ist dies mit einem ScrollPane. In Ihrem ScrollPane definieren Sie Ihre Zeilen und deren Layouts (wahrscheinlich ist jede Zeile eine HBox, die ein ImageView und ein TableView enthält, das auf die Höhe von ImageView gesetzt ist). Dann müssen die TableViews in Ihrem ScrollPane ScrollPane den Scrollvorgang überschreiben lassen - das heißt, ihr OnScroll blubbert bis zum ScrollPane.
Dann überschreiben Sie das onScroll-Verhalten für Ihr ScrollPane. Der Algorithmus für das Scrollen könnte so lauten:
Es gibt zwei Modi.
1) Durch das Scrollen in einem Album scrollt das TableView in dieser Zeile. Wenn der Bildlauf über die Grenzen von scrollHeight (der Bereich zwischen 0 und scrollHeight) von TableView hinausgeht, wechselt der Modus zum Blättern zu einem Album.
2) Wenn Sie zu einem Album scrollen, scrollt ScrollPane einen Betrag bis zur Höhe der aktuellen Zeile. Wenn Sie einen Bildlauf durchführen, der größer ist als die aktuelle Zeilenhöhe, wechseln Sie zum nächsten Album und schalten den Modus zurück auf Scrolling IN in diesem Album.
3) Edge Cases: Scrollen innerhalb des ScrollPane über die Grenzen des scrollHeight von ScrollPane (der Bereich zwischen 0 und scrollHeight) springt sofort zum nächsten Album und schaltet den Modus zurück auf Scrolling IN dieses Albums.
Ich würde ein Codebeispiel geben, aber ich habe noch nie jemanden gesehen, der versucht hat, das zu tun. Ich weiß nur, du kannst es tun.
Ich würde Ihnen empfehlen, einen Blick auf die SpreadsheetView in ControlsFX
zu werfenMit der SpreadsheetView können Sie am Anfang des Bildschirms eine beliebige Zeilenanzahl festlegen. Du hättest also den ersten Teil deines Verhaltens.
In Anbetracht der Tatsache, dass man auf einen anderen stößt, wäre es mit dem SpreadsheetView schwieriger, aber nicht unmöglich.
Wenn Sie dieses Verhalten in TableView implementieren möchten, finden Sie im SpreadsheetView-Code sehr nützliche Tricks.