需求:得到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还有其他的回调,根据需求使用不同的,用法基本一样
网友评论