Android RecyclerView捕捉效果覆盖fling方法

时间:2015-07-03 07:31:15

标签: java android

我正在尝试实现此覆盖方法RecyclerView horizontal scroll snap in center.

但是我一直遇到运行时错误。这是我的代码:

    public class custom_fling extends RecyclerView{
    private Point size = new Point();
    public custom_fling(Context context) {
        super(context);
    }

    @Override
    public boolean fling(int velocityX, int velocityY) {
        LinearLayoutManager linearLayoutManager = (LinearLayoutManager) getLayoutManager();

//these four variables identify the views you see on screen.
        int lastVisibleView = linearLayoutManager.findLastVisibleItemPosition();
        int firstVisibleView = linearLayoutManager.findFirstVisibleItemPosition();
        View firstView = linearLayoutManager.findViewByPosition(firstVisibleView);
        View lastView = linearLayoutManager.findViewByPosition(lastVisibleView);

//these variables get the distance you need to scroll in order to center your views.
//my views have variable sizes, so I need to calculate side margins separately.
//note the subtle difference in how right and left margins are calculated, as well as
//the resulting scroll distances.
        int leftMargin = (size.x - lastView.getWidth()) / 2;
        int rightMargin = (size.x - firstView.getWidth()) / 2 + firstView.getWidth();
        int leftEdge = lastView.getLeft();
        int rightEdge = firstView.getRight();
        int scrollDistanceLeft = leftEdge - leftMargin;
        int scrollDistanceRight = rightMargin - rightEdge;

//if(user swipes to the left)
        if(velocityX > 0) smoothScrollBy(scrollDistanceLeft, 0);
        else smoothScrollBy(-scrollDistanceRight, 0);

        return true;
    }
}

我相信我的问题与我的RecyclerView的投射有关。我正在尝试将其转换为custom_fling。关于如何解决这个问题的任何想法?

0 个答案:

没有答案