zoukankan      html  css  js  c++  java
  • RecycleView弹性滑动

    还有点bug,建议使用 LinearSnapHelper

      rvPilotList.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
    
    //                offsetY += dy;
    //
    //                int first = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
    //                int last = linearLayoutManager.findLastCompletelyVisibleItemPosition();
    //                View firstview = linearLayoutManager.findViewByPosition(first);
    //                if (viewWidth == 0) {
    //                    viewWidth = firstview.getHeight();
    //                }
    //                int offseta = firstview.getTop();
    //                float sx = 1f + (float) offseta / viewWidth;
    //                if (offsetY == 0) {
    //                    View view = linearLayoutManager.findViewByPosition(first + 1);
    //                    scaleUp(view);
    //                }
    //
    //                firstview.setScaleX(sx);
    //                View lastview = linearLayoutManager.findViewByPosition(last);
    //                offseta = recyclerView.getHeight() - lastview.getBottom();
    //                sx = 1f + (float) offseta / viewWidth;
    //                lastview.setScaleX(sx);
    
                }
    
                @Override
                public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);
                    if (newState == 0) {
                        int visibleItem = linearLayoutManager.getChildCount();
                        int coun = 0;
                        if (visibleItem % 2 == 1) {
                            coun = (visibleItem - 1) / 2;
                        } else {
                            coun = visibleItem / 2;
                        }
                        Log.i(TAG, "onScrollStateChanged: " + visibleItem);
                        Log.i(TAG, "onScrollStateChanged: coun" + coun);
                        int postion = linearLayoutManager.findFirstVisibleItemPosition();
                        Log.i(TAG, "onScrollStateChanged: postion" + postion);
                        View view;
                        Log.i(TAG, "findFirstCompletelyVisibleItemPosition: " + linearLayoutManager.findFirstCompletelyVisibleItemPosition());
                        if (postion == 0 && linearLayoutManager.findFirstCompletelyVisibleItemPosition() != 0) {
                            view = linearLayoutManager.findViewByPosition(0);
                        } else {
                            view = linearLayoutManager.findViewByPosition(postion + coun);
                        }
                        int pm = ((ViewGroup) view.getParent()).getMeasuredWidth();
                        int left = view.getLeft() + view.getWidth() / 2;
    
                        int offset = 0;
                        if (left == pm / 2) {
                            return;
                        }
                        if (left < pm / 2) {
                            offset = -(pm / 2 - left);
                        } else {
                            offset = left - pm / 2;
                        }
                        rvPilotList.smoothScrollBy(offset, 0);
                    }
                }
            });
    

      

  • 相关阅读:
    ERP渠道管理添加验证和查询(二十二)
    SqlServer导入Excel数据
    WebApi帮助类
    SqlServer 递归查询树
    SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句
    Excel上传找到错误数据类型
    索引Hint提示(INDEX Hint)
    SqlServer批量Sql一个表的数据导入到另一个数据
    SqlServer 游标
    JAVA运算符
  • 原文地址:https://www.cnblogs.com/6324/p/10733971.html
Copyright © 2011-2022 走看看