RecyclerView上的反弹效果

时间:2015-07-26 00:50:54

标签: android android-recyclerview bounce

我想对RecyclerView使用反弹效果。每当我过度滚动内容时弹跳效果......

是否存在库或示例?

4 个答案:

答案 0 :(得分:12)

我也找不到任何支持RecyclerView反弹效果的库。最终我自己最终实现了一个新的库。看看我的图书馆overscroll-bouncy-android。 。它目前支持使用LinearLayoutManager的RecyclerView。我也在使用ListView和ScrollView。

使用我的库:

第1步:

dependencies {
    compile 'com.chauthai.overscroll:overscroll-bouncy:0.1.0'
}

第2步:

<com.chauthai.overscroll.RecyclerViewBouncy
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

答案 1 :(得分:5)

使用动态动画可以轻松完成此操作,而无需使用任何第三方库

我写了一篇有关here的文章。

另一个优势是,它可以与任何类型的布局管理器一起使用,并且由于我们使用的是基于物理的动态动画,因此动画的感觉更加强烈。自然。

答案 2 :(得分:4)

您可以使用此库https://github.com/EverythingMe/overscroll-decor 因此,您需要像这样创建自己的ScrollDecorAdapter

public class CustomRecyclerViewOverScrollDecorAdapter extends RecyclerViewOverScrollDecorAdapter {
RecyclerView mRecyclerView;

public CustomRecyclerViewOverScrollDecorAdapter(RecyclerView recyclerView) {
    super(recyclerView);
    mRecyclerView = recyclerView;
}

@Override
public boolean isInAbsoluteEnd() {
    LinearLayoutManager linearLayoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
    if (linearLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL) {
        return !mRecyclerView.canScrollHorizontally(1);
    } else {
        return !mRecyclerView.canScrollVertically(1);
    }
  }
}

现在在您的片段/活动中使用

 CustomVerticalOverScrollDecorator overScrollDecorator =
            new CustomVerticalOverScrollDecorator(new CustomRecyclerViewOverScrollDecorAdapter(yourRecyclerView));

CustomVerticalOverScrollDecorator就像这样

public class CustomVerticalOverScrollDecorator extends VerticalOverScrollBounceEffectDecorator {

public CustomVerticalOverScrollDecorator(IOverScrollDecoratorAdapter viewAdapter) {
    this(viewAdapter, DEFAULT_TOUCH_DRAG_MOVE_RATIO_FWD, DEFAULT_TOUCH_DRAG_MOVE_RATIO_BCK, DEFAULT_DECELERATE_FACTOR);
}

public CustomVerticalOverScrollDecorator(IOverScrollDecoratorAdapter viewAdapter, float touchDragRatioFwd, float touchDragRatioBck, float decelerateFactor) {
    super(viewAdapter, touchDragRatioFwd, touchDragRatioBck, decelerateFactor);

    // Some setup on the view itself.
   }
  }

答案 3 :(得分:0)

你可以试试我的图书馆https://github.com/Valkriaine/Bouncy

同时支持recyclerview和nestedscrollview。

在您的应用模块 build.gradle 中:

   dependencies {
        implementation 'androidx.recyclerview:recyclerview:1.1.0'
        implementation 'com.factor:bouncy:1.8'
   }

并将其用作普通的回收器视图。

<com.factor.bouncy.BouncyRecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:recyclerview_fling_animation_size=".7"
        app:recyclerview_overscroll_animation_size=".7"
        app:recyclerview_damping_ratio="DAMPING_RATIO_LOW_BOUNCY"
        app:recyclerview_stiffness="STIFFNESS_MEDIUM"
        app:allow_drag_reorder="true"
        app:allow_item_swipe="false"/>

设置适配器和布局管理器。在技​​术上支持任何布局管理器:

   recycler_view.setAdapter(myAdapter);
   recycler_view.setLayoutManager(new LinearLayoutManager(context));
   //recycler_view.setLayoutManager(new GridLayoutManager(context, 3));

水平过度滚动:

recycler_view.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));

如果弹跳动画方向错误(例如水平弹跳而垂直布局)您也可以手动设置动画方向:

 recycler_view.setOrientation(LinearLayoutManager.VERTICAL);