Snappy Scrollen in RecyclerView

Ich bin versucht, die neue RecyclerView Klasse für ein Szenario, in dem ich die Komponente snap, um ein bestimmtes element beim scrollen (Die alten Android - Gallery in den Sinn kommt als ein Beispiel für eine solche Liste mit einem center-gesperrt-Position).

Dies ist der Ansatz, dass ich den so weit:

Habe ich eine Schnittstelle ISnappyLayoutManager enthält eine Methode, die getPositionForVelocity berechnet, an welcher position die anzeigen sollten am Ende den scrollen angesichts der ersten Flugstunde Geschwindigkeit.

public interface ISnappyLayoutManager {
    int getPositionForVelocity(int velocityX, int velocityY);  
}

Dann habe ich eine Klasse SnappyRecyclerView, die Unterklassen RecyclerView ist, und überschreibt seinen Seitensprung () - Methode in einer Weise zu werfen, um die genaue richtige Menge:

public final class SnappyRecyclerView extends RecyclerView {

    /** other methods deleted **/

    @Override
    public boolean fling(int velocityX, int velocityY) {
        LayoutManager lm = getLayoutManager();

        if (lm instanceof ISnappyLayoutManager) {
            super.smoothScrollToPosition(((ISnappyLayoutManager) getLayoutManager())
                    .getPositionForVelocity(velocityX, velocityY));
        }
        return true;
    }
}

Ich bin nicht sehr glücklich mit diesem Ansatz aus mehreren Gründen. Zunächst scheint es, entgegen der Philosophie der "RecyclerView" zu haben, um eine Unterklasse zu verwirklichen ist eine bestimmte Art von Blättern. Zweitens, wenn ich will benutzen Sie einfach die Standard - LinearLayoutManager wird es etwas komplexer, wie ich Durcheinander herum mit seinen Einbauten um zu verstehen, seine aktuellen scroll-Zustand und berechnen genau, wo diese Schriftrollen. Schließlich, dies nicht kümmern uns auch um alle möglichen Blättern Szenarien, als wenn Sie die Liste verschieben und dann pause und dann heben Sie einen finger, kein Seitensprung-Ereignis tritt ein (die Geschwindigkeit ist zu niedrig) und so die Liste bleibt in einer position auf halbem Weg. Dies kann unter Umständen übernommen werden, indem ein auf Blättern Status-listener, um die RecyclerView, aber das fühlt sich auch sehr hacky.

Ich das Gefühl, ich muss etwas fehlen. Gibt es einen besseren Weg, dies zu tun?

InformationsquelleAutor der Frage Catherine | 2014-10-14

Schreibe einen Kommentar