相关疑难解决方法(0)

RecyclerView水平滚动卡扣在中心

我正在尝试使用RecyclerView在这里制作类似旋转木马的视图,我希望项目在滚动时在屏幕中间捕捉,一次一个项目.我试过用了recyclerView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING);

但是视图仍然滚动顺畅,我也尝试使用滚动侦听器来实现我自己的逻辑,如下所示:

recyclerView.setOnScrollListener(new OnScrollListener() {
                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);
                    Log.v("Offset ", recyclerView.getWidth() + "");
                    if (newState == 0) {
                        try {
                               recyclerView.smoothScrollToPosition(layoutManager.findLastVisibleItemPosition());
                                recyclerView.scrollBy(20,0);
                            if (layoutManager.findLastVisibleItemPosition() >= recyclerView.getAdapter().getItemCount() - 1) {
                                Beam refresh = new Beam();
                                refresh.execute(createUrl());
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

从右到左的滑动现在工作正常,但不是相反,我在这里缺少什么?

android horizontal-scrolling android-recyclerview

76
推荐指数
5
解决办法
7万
查看次数

在RecyclerView中滚动滚动

我正在尝试将新RecyclerView类用于我希望组件在滚动时捕捉到特定元素的场景(将旧版Android Gallery作为具有中心锁定项的此类列表的示例).

这是我到目前为止采取的方法:

我有一个接口,ISnappyLayoutManager它包含一个方法,getPositionForVelocity它计算视图应该在给定初始fling速度的情况下结束滚动的位置.

public interface ISnappyLayoutManager {
    int getPositionForVelocity(int velocityX, int velocityY);  
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个类,它以这样的方式SnappyRecyclerView子类化RecyclerView并覆盖它的fling()方法,以便将视图推送到正确的数量:

public final class SnappyRecyclerView extends RecyclerView {

    /** other methods deleted **/

    @Override
    public boolean fling(int velocityX, int velocityY) {
        LayoutManager lm = getLayoutManager();

        if (lm instanceof ISnappyLayoutManager) {
            super.smoothScrollToPosition(((ISnappyLayoutManager) getLayoutManager())
                    .getPositionForVelocity(velocityX, velocityY));
        }
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于几个原因,我对这种方法不是很满意.首先,似乎与"RecyclerView"的哲学相反,它必须将其子类化以实现某种类型的滚动.其次,如果我只想使用默认值LinearLayoutManager,这会变得有点复杂,因为我必须弄乱它的内部,以便了解它的当前滚动状态并精确计算滚动到的位置.最后,这甚至没有处理所有可能的滚动方案,就像你移动列表然后暂停然后举起手指一样,没有发生任何事件(速度太低),所以列表仍然处于中途位置.这可以通过添加一个on scroll状态监听器来处理RecyclerView,但也感觉非常hacky.

我觉得我必须遗漏一些东西.有一个更好的方法吗?

android

69
推荐指数
8
解决办法
5万
查看次数