垂直滚动Android中的RecyclerView按像素

Raf*_*ael 3 android android-recyclerview

在我的聊天应用程序中,我使用RecyclerView和LayoutManager来显示聊天消息列表.我有一个用户浏览旧邮件和新邮件到达的情况.此时我想以小距离滚动聊天以确认收到新消息的用户.我需要以像素为单位滚动我的RecyclerView.我发现layoutManager有方法scrollVerticallyBy,

public int scrollVerticallyBy (int dy, RecyclerView.Recycler recycler, RecyclerView.State state)
Run Code Online (Sandbox Code Playgroud)

但我对它所需的参数,RecyclerView.Recycler recycleler,RecyclerView.State状态感到困惑,我不确定它是否能完成我的工作.

换句话说,我想找到ListView.smoothScrollBy的重复版(int distance,int duration);

Ant*_*nio 5

实现这一目标的最佳方法是使用:

recyclerView.smoothScrollBy(0, 100);

这是该方法的签名.您可以在x和y轴上滚动:

public void smoothScrollBy(int dx, int dy)

注意:如果smothScrollBy(dx,dy)不起作用是由于RecyclerView尚未加载其元素.为此,我建议使用:

new Handler().postDelayed(new Runnable() {
  @Override public void run() {
    recyclerView.smoothScrollBy(0, 100);
  }
}, 200);
Run Code Online (Sandbox Code Playgroud)

这样,您可以确保已加载视图


Nov*_*ile 1

您可以使用:

\n\n
recyclerView.smoothScrollToPosition(recyclerView.getAdapter().getItemCount());\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果蚂蚁相关职位。

\n\n
 recyclerView.smoothScrollToPosition(0);\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考: http: //blog.stylingandroid.com/scrolling-recyclerview-part-1/

\n\n
    @Override\npublic void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,\n        int position) {\n    LinearSmoothScroller linearSmoothScroller =\n            new LinearSmoothScroller(recyclerView.getContext()) {\n                @Override\n                public PointF computeScrollVectorForPosition(int targetPosition) {\n                    return LinearLayoutManager.this\n                            .computeScrollVectorForPosition(targetPosition);\n                }\n            };\n    linearSmoothScroller.setTargetPosition(position);\n    startSmoothScroll(linearSmoothScroller);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

LinearSmoothScroller 的实例负责执行实际的滚动。这不是\xe2\x80\x99t 一个简单的类\xe2\x80\x93,它包含大量逻辑。然而,它实现的行为相当容易理解。它不是尝试确定在到达终点之前需要滚动的确切像素数,而是以每英寸 25 毫秒的速度执行一系列10000 像素的滑动,直到最终目标项目进入视口,并且然后它减速停止,最终目标可见。

\n

  • 我想按距离滚动,而不是滚动到列表的末尾或开头。 (6认同)