GravitySnapHelper icon indicating copy to clipboard operation
GravitySnapHelper copied to clipboard

Is it possible to snap every X views?

Open AndroidDeveloperLB opened this issue 8 years ago • 16 comments

For example, suppose I have tens of views to scroll through. If the user scrolled x/2 and a bit more, it will get to the X view.

AndroidDeveloperLB avatar Nov 07 '17 12:11 AndroidDeveloperLB

This would require another custom SnapHelper. I don't have any plans to implement this, though.

rubensousa avatar Dec 05 '17 18:12 rubensousa

Too bad. Thanks anyway

AndroidDeveloperLB avatar Dec 05 '17 20:12 AndroidDeveloperLB

@AndroidDeveloperLB , I'm adding something similar in 2.2.0. It'll not be exactly snapping on X views, but instead limiting the fling distance. You can check this out here: https://github.com/rubensousa/RecyclerViewSnap/blob/develop/gravitysnaphelper/src/main/java/com/github/rubensousa/gravitysnaphelper/GravitySnapHelper.java#L293

You'll also be able to customise the snap speed: https://github.com/rubensousa/RecyclerViewSnap/blob/develop/gravitysnaphelper/src/main/java/com/github/rubensousa/gravitysnaphelper/GravitySnapHelper.java#L331

rubensousa avatar Aug 30 '19 11:08 rubensousa

Check this issue: #29

rubensousa avatar Aug 30 '19 12:08 rubensousa

Why close it if it's not the same? Can you please post a video of what was added?

AndroidDeveloperLB avatar Aug 30 '19 14:08 AndroidDeveloperLB

It's not released yet, but it's in the develop branch if you want to check it out.

I closed the issue again since it's not really what you asked for, although it's similar. That's why I linked the other issue.

Here's a preview: https://drive.google.com/file/d/1vbJ5jz39cCcVgWIeGRv5vWF5ESOglDCr/view

rubensousa avatar Aug 30 '19 15:08 rubensousa

It's not the same? But if it's not the same, why close it? I'm confused.

AndroidDeveloperLB avatar Aug 30 '19 21:08 AndroidDeveloperLB

I closed it since I don't have plans to work on this specific feature at the moment. You closed this the last time because of that same reason

rubensousa avatar Aug 31 '19 00:08 rubensousa

Sorry I don't remember. Anyway, you added something that seem what I wrote, no? What's the difference between what I requested and what you've added?

AndroidDeveloperLB avatar Aug 31 '19 08:08 AndroidDeveloperLB

You wanted to snap every X views, however I've added support for limiting the maximum fling according to a value you can set through: https://github.com/rubensousa/RecyclerViewSnap/blob/decfb4102dcd8d741cce65f88e2d82e768d840b7/gravitysnaphelper/src/main/java/com/github/rubensousa/gravitysnaphelper/GravitySnapHelper.java#L274 And https://github.com/rubensousa/RecyclerViewSnap/blob/decfb4102dcd8d741cce65f88e2d82e768d840b7/gravitysnaphelper/src/main/java/com/github/rubensousa/gravitysnaphelper/GravitySnapHelper.java#L289

Limiting snapping on every X view is different, since you may have views with different width.

rubensousa avatar Aug 31 '19 12:08 rubensousa

Oh right. Sorry for that. Why not consider adding this functionality ? It could be nice, for example, for a week view of a calendar app (shows a single week each time)

AndroidDeveloperLB avatar Aug 31 '19 13:08 AndroidDeveloperLB

Because it requires time I don't have at the moment. However, I could leave this open so that anyone else could work on this instead. Meanwhile, If you need something similar, you could use the other approach.

rubensousa avatar Aug 31 '19 13:08 rubensousa

OK please let it be open, then.

AndroidDeveloperLB avatar Aug 31 '19 13:08 AndroidDeveloperLB

@rubensousa Hello! Thanks for the lib it's very helpful. I have a question about the feature "every x" I understand that you provided some another feature, but I try to use it and don't have a profit. Here is my config:

    val snapHelper = GravitySnapHelper(Gravity.CENTER).apply {
            scrollMsPerInch = 1f
            maxFlingDistance = 20.dp.toPx()
            maxFlingSizeFraction = 0.0001f
        }
        snapHelper.attachToRecyclerView(recyclerView)
        snapHelper.scrollToPosition(Int.MAX_VALUE/2)

My view in XML:

   <com.github.rubensousa.gravitysnaphelper.GravitySnapRecyclerView
            android:id="@+id/camera_type_rv"
            android:layout_width="match_parent"
            android:layout_height="25dp"
            android:layout_marginStart="40dp"
            app:snapMaxFlingSizeFraction="0.1"
            android:layout_marginEnd="40dp"
            app:snapGravity="center"
            android:layout_marginBottom="100dp"
            android:animateLayoutChanges="false"
            android:orientation="horizontal"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:itemCount="3" />

My goal is to go through the list one by one. But if it's impossible by this lib, I try to set slow speed of scrolling and it doesn't work with method scrollMsPerInch.

This is my current implementation: https://drive.google.com/file/d/1GuraO_nDQR8IE1jzjZyZ51eyiOzfXlOb/view?usp=sharing

That is what I want to have: https://drive.google.com/file/d/19k8MFVK69Xiorw1LErUgLt7-wEAQ0fat/view?usp=sharing

albka1986 avatar Nov 14 '19 16:11 albka1986

@albka1986 for that use case, you need custom touch event handling. It's not possible to scroll one item only. For that, you need PagerSnapHelper. Check this StackOverflow question: https://stackoverflow.com/questions/53483268/how-to-have-recyclerview-snapped-to-center-and-yet-be-able-to-scroll-to-all-item/53510142#53510142

rubensousa avatar Nov 15 '19 17:11 rubensousa

Thanks

albka1986 avatar Nov 15 '19 20:11 albka1986