Android 滚动停止时的回收器视图

Android 滚动停止时的回收器视图,android,android-recyclerview,Android,Android Recyclerview,基本上,我希望我的recyclerview自动滚动到项目未显示一半的位置。就像谷歌游戏里的那个 我已经写了一个代码 public void scrollToVisible(){ int firstVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); View view = recyclerView.getLayout

基本上,我希望我的recyclerview自动滚动到项目未显示一半的位置。就像谷歌游戏里的那个

我已经写了一个代码

public void scrollToVisible(){
    int firstVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
    View view = recyclerView.getLayoutManager().getChildAt(0);
    if (firstVisibleItemPosition > 0 && view != null) {
        int offsetTop = view.getTop();
        if (firstVisibleItemPosition - 1 >= 0 && adapter.getItemCount() > 0) {
            ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(firstVisibleItemPosition - 1, offsetTop);
        }
    }
}

接下来是问题。我不知道该把代码放在哪里。我有一个模糊的想法,把它当循环视图停止滚动,但我已经搜索了很长一段时间了,我找不到这样的方法。当我把它放在onScroll上时,出现了一些意想不到的行为

您可以创建一个CustomRecyclerView扩展RecyclerView

public class CustomRecyclerView extends RecyclerView {
@Override
public void onScrollStateChanged(int state) {
    super.onScrollStateChanged(state);

    // check if scrolling has stopped
    if (state == SCROLL_STATE_IDLE) {
         LinearLayoutManager linearLayoutManager = (LinearLayoutManager) getLayoutManager();
         // use code here
    }
}

您可以创建CustomRecyclerView扩展RecyclerView

public class CustomRecyclerView extends RecyclerView {
@Override
public void onScrollStateChanged(int state) {
    super.onScrollStateChanged(state);

    // check if scrolling has stopped
    if (state == SCROLL_STATE_IDLE) {
         LinearLayoutManager linearLayoutManager = (LinearLayoutManager) getLayoutManager();
         // use code here
    }
}

如果对某人有帮助:

    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

                    super.onScrolled(recyclerView, dx, dy);

                        Log.d("y value",String.valueOf(dy));
                    if (dy > 0) {                       

                       //scrolling up

                    } else {
// Scrolling down
                    }
                }

                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);

                    if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
                        // Do something
                        Log.e("SCROLL_STATE_FLING","SCROLL_STATE_FLING");
                    } else if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                        Log.e("SCROLLTOUCH_SCROLL","SCROLL_STATE_TOUCH_SCROLL");
                        //slideUp(party_view);
                        // Do something
                    } else if (newState==AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
                        // Do something
                        //slideDown(party_view);
                        Log.e("SCROLL_STATE_IDLE","SCROLL_STATE_IDLE");
                    }
                }
            });

如果对某人有帮助:

    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

                    super.onScrolled(recyclerView, dx, dy);

                        Log.d("y value",String.valueOf(dy));
                    if (dy > 0) {                       

                       //scrolling up

                    } else {
// Scrolling down
                    }
                }

                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);

                    if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
                        // Do something
                        Log.e("SCROLL_STATE_FLING","SCROLL_STATE_FLING");
                    } else if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                        Log.e("SCROLLTOUCH_SCROLL","SCROLL_STATE_TOUCH_SCROLL");
                        //slideUp(party_view);
                        // Do something
                    } else if (newState==AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
                        // Do something
                        //slideDown(party_view);
                        Log.e("SCROLL_STATE_IDLE","SCROLL_STATE_IDLE");
                    }
                }
            });

这在我使用CustomRecycleView android.view.InflateException:Binary XML文件行#8:Error Expling class gaming.kg.passingvehiclecounter.CustomRecycleWebOk时显示出来,我终于成功了,谢谢。现在唯一的问题是平滑滚动,但这是一个不同的问题,所以我会将你的答案标记为正确。这在我使用customrecyclerview android.view.InflateException:Binary XML文件行时显示出来。8:错误膨胀class gaming.kg.passingvehiclecounter.CustomRecyclerService我终于成功了,谢谢。现在唯一的问题是平滑滚动,但这是一个不同的问题,所以我会将你的答案标记为正确