在我的聊天应用程序中,我使用RecyclerView和LayoutManager显示聊天消息列表。我有一个用户浏览旧邮件和新邮件到达的情况。此时我想以小距离滚动聊天以确认收到新消息的用户。 我需要以像素为单位滚动我的RecyclerView。 我发现layoutManager有方法scrollVerticallyBy,
public int scrollVerticallyBy (int dy, RecyclerView.Recycler recycler, RecyclerView.State state)
但我对它所需的参数感到困惑, RecyclerView.Recycler recycleler,RecyclerView.State state , 而且我不确定它是否会完成我的工作。
换句话说,我想找到 ListView.smoothScrollBy(int distance,int duration)的重新发布;
答案 0 :(得分: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);
通过这种方式,您可以确保已加载视图
答案 1 :(得分:2)
您可以使用:
recyclerView.smoothScrollToPosition(recyclerView.getAdapter().getItemCount());
如果蚂蚁相关的位置。
recyclerView.smoothScrollToPosition(0);
参考:http://blog.stylingandroid.com/scrolling-recyclerview-part-1/
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
int position) {
LinearSmoothScroller linearSmoothScroller =
new LinearSmoothScroller(recyclerView.getContext()) {
@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return LinearLayoutManager.this
.computeScrollVectorForPosition(targetPosition);
}
};
linearSmoothScroller.setTargetPosition(position);
startSmoothScroll(linearSmoothScroller);
}
LinearSmoothScroller的实例,负责执行实际滚动。这不是一个简单的类 - 它包含了很多逻辑。但是,它实现的行为很容易理解。它不会尝试确定在到达终点之前需要滚动的确切像素数,而是以 25毫秒/英寸的速度执行一系列 10000像素 flings 直到最终目标项进入视口,然后减速停止,最终目标可见。
答案 2 :(得分:0)
您可以像这样直接滚动到回收站视图的底部 smoothScroll 。
/* Method to set the recycler view focus to bottom */
private void scrollToBottom() {
mRecyclerView.scrollToPosition(mAdapter.getItemCount() - 1);
}