android - RecyclerVIew 自动滚动显示所有元素,如 News Feed 等,

标签 android scroll android-recyclerview

如何平滑地自动滚动 RecyclerView 以便用户可以看到 RecyclerView 的所有元素并从头开始再次滚动 - 如新闻提要等。

我知道 smoothScrollToPosition()scrollToPosition() 但它们最终会以过快的速度滚动到最后一个元素。

我希望 RecyclerView 具有动画效果并缓慢移动。

最佳答案

只是为了稍微改进答案,它是自动无限滚动且动画流畅。

final int speedScroll = 1200;
final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
    int count = 0;
    boolean flag = true;
    @Override
    public void run() {
        if(count < adapter.getItemCount()){
            if(count==adapter.getItemCount()-1){
                flag = false;
            }else if(count == 0){
                flag = true;
            }
            if(flag) count++;
            else count--;

            recyclerView.smoothScrollToPosition(count);
            handler.postDelayed(this,speedScroll);
        }
    }
};

handler.postDelayed(runnable,speedScroll);

这正是您的答案,但如果您链接到更流畅的动画,请使用 LayoutManager

recyclerView.setLayoutManager(new CustomLinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));

控制动画改变 MILLISECONDS_PER_INCH 值。

public class CustomLinearLayoutManager extends LinearLayoutManager {
    public CustomLinearLayoutManager(Context context) {
        super(context);
    }

    public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
        super(context, orientation, reverseLayout);
    }

    public CustomLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
        final LinearSmoothScroller linearSmoothScroller =
                new LinearSmoothScroller(recyclerView.getContext()) {
                    private static final float MILLISECONDS_PER_INCH = 200f;

                    @Override
                    public PointF computeScrollVectorForPosition(int targetPosition) {
                        return CustomLinearLayoutManager.this
                                .computeScrollVectorForPosition(targetPosition);
                    }

                    @Override
                    protected float calculateSpeedPerPixel
                            (DisplayMetrics displayMetrics) {
                        return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
                    }
                };
        linearSmoothScroller.setTargetPosition(position);
        startSmoothScroll(linearSmoothScroller);
    }
}

关于android - RecyclerVIew 自动滚动显示所有元素,如 News Feed 等,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35773980/

相关文章:

Jquery,聚焦一个元素一次,然后滚动到下一个&下一个&下一个

android - ListView会自动回收 View 吗?

android-recyclerview - 如何在 Android TV 上的 RecyclerView 中实现滚动?

java - 为 Android 项目创建和引用库(使用命令行和 gradle)

java - 如何使用Gson解析这种json字符串?

java - Android 加载时的多个 Web 服务调用

android - 如何将回收器高度设置为 recyclerView 中的最高项目?

android - 更改android中的默认 Activity

javascript - 为什么 AngularJS 的 ng-bind-html 指令会改变 div 的溢出行为?

css - 在 pageid 控制的微型网站中滚动中断 - 仅在桌面 Safari 中