【问题标题】:get recyclerview item index in the middle of the screen获取屏幕中间的recyclerview项目索引
【发布时间】:2017-08-21 15:53:07
【问题描述】:

我有一些项目的回收视图,我想获取屏幕中间项目的索引。现在我只能获得第一个可见项目和最后一个可见项目的项目索引中间。

这是屏幕截图: image

这是代码

myList = (RecyclerView) v.findViewById(R.id.frag_penampilanobat_pilih_bentuk);
    final LinearLayoutManager layoutManager
            = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
    Display display = getActivity().getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    itemWidth = getResources().getDimension(R.dimen.item_width);
    padding = (size.x - itemWidth) / 2;
    firstItemWidth = getResources().getDimension(R.dimen.padding_item_width);

    allPixels = 0;
    ExtraItemsAdapter bentuk_adapter = new ExtraItemsAdapter(0, clone, padding);
    myList.setAdapter(bentuk_adapter);
    myList.addOnScrollListener(new RecyclerView.OnScrollListener() {

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

            int firstPos = layoutManager.findFirstVisibleItemPosition();

            int lastPos = layoutManager.findLastVisibleItemPosition();
            int middle = (Math.abs(lastPos - firstPos) / 2 + firstPos) + 1;

            pos_icon_bentuk = middle;
                source = getActivity().getResources().getDrawable(pengingat_obat_helper.getDrawable(pos_icon_shape));
            bentuk_obat.setBackground(FormatShapeColor.setColor(getActivity(), getColor(), source, pos_icon_warna_1));

        }
    });

我不知道该怎么做。有人知道吗?任何答案将不胜感激。 我很抱歉我的英语不好, 谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    据我了解,您需要中间。这是我的解决方案。

    int firstPos = layoutManager.findFirstVisibleItemPosition();
    int lastPos  = layoutManager.findLastVisibleItemPosition();
    
    int centerRecyclerView = activityMainBinding.recyclerView.getWidth() / 2;
    
    int minDelta=Integer.MAX_VALUE;
                    
    int middle = 0;
                    
    for(int i=firstPos;i<=lastPos;i++) {
        View view = layoutManager.findViewByPosition(i);
        if(view!=null) {
            int positionCenterView = view.getLeft() + (view.getRight() - view.getLeft()) / 2;
            int delta = Math.abs(centerRecyclerView - positionCenterView);
            if(delta<minDelta)
            {
                minDelta=delta;
                middle =i;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      相关资源
      最近更新 更多