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);
实现这一目标的最佳方法是使用:
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)
这样,您可以确保已加载视图
您可以使用:
\n\nrecyclerView.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\nLinearSmoothScroller 的实例负责执行实际的滚动。这不是\xe2\x80\x99t 一个简单的类\xe2\x80\x93,它包含大量逻辑。然而,它实现的行为相当容易理解。它不是尝试确定在到达终点之前需要滚动的确切像素数,而是以每英寸 25 毫秒的速度执行一系列10000 像素的滑动,直到最终目标项目进入视口,并且然后它减速停止,最终目标可见。
\n 归档时间: |
|
查看次数: |
4269 次 |
最近记录: |