记录一下:
网上使用
getChildAdapterPosition(View):获取view在Adapter中的position,
indexOfChild(View):获取view在当前下标位置
getChildDrawingOrder(int childCount, int i):childCount为当前屏幕内所展示的个数
所以使用getChildAdapterPosition(View)的位置跟childCount比较时候就会有问题
自定义RecyclerView, 重写getChildDrawingOrder方法, 让选中的item最后绘制, 这样就不会让其他view遮挡.
public class MyRecyclerView extends RecyclerView {
private int mSelectedPosition = 0;
public MyRecyclerView (Context context) {
super(context);
init();
}
public MyRecyclerView (Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public MyRecyclerView (Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
//启用子视图排序功能
setChildrenDrawingOrderEnabled(true);
}
@Override
public void onDraw(Canvas c) {
// mSelectedPosition = getChildAdapterPosition(getFocusedChild());
mSelectedPosition = indexOfChild(getFocusedChild());
super.onDraw(c);
}
/**
* 使子view位置在上层
* @param child
*/
// @Override
// public void bringChildToFront(View child) { //重写,不调用父类方法;获取child的实际position
// // super.bringChildToFront(child);
// mSelectedPosition = indexOfChild(child);
// invalidate();
// }
@Override
protected int getChildDrawingOrder(int childCount, int i) {
int position = mSelectedPosition;
if (position < 0) {
return i;
} else {
if (i == childCount - 1) {
if (position > i) {
position = i;
}
return position;
}
if (i == position) {
return childCount - 1;
}
}
return i;
}
}