获取RecyclerView的某个Item的坐标

需求:得到RecyclerView的第一个item的位置坐标设置蒙层中的坐标

问题:

获取RecyclerView的某个Item的坐标

情景1:RecyclerView绘制完成

以第一个item为例的代码:

if(mAdapter.getItemCount() > 0) {
    RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForAdapterPosition(0);
    if (holder != null && holder instanceof CategoryViewHolder) {
        CategoryViewHolder viewHolder = (CategoryViewHolder) holder;
        int[] location = new int[2];
        viewHolder.image.getLocationOnScreen(location);
        //使用坐标
    }
}

注意:

此种方式使用绘制完成的时候

情景2:RecyclerView没有完成

原理:采用ViewTreeObserver监听RecyclerView绘制,知道绘制完成再有其他操作

代码:

    final ViewTreeObserver viewTreeObserver = getActivity().getWindow().getDecorView().getViewTreeObserver();
    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            int height = mRefreshRecyclerView.getMeasuredHeight();
            if (height > 10) {
                isShowOriginalGuide();
                getActivity().getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        }
    });

注意:

得到绘制信息之后一定要remove这个监听,否则一直会回到这个方法
因为场景需要我的注销是直接在回调里,可以根据需求放在onDestroy()等方法,只要remove就行
ViewTreeObserver还有其他的回调,根据需求使用不同的,用法基本一样

参考地址:
https://stackoverflow.com/questions/28505202/getchildcount-and-getchildat-return-zero-for-recyclerview

你可能感兴趣的:(获取RecyclerView的某个Item的坐标)