这是在Android4.4版本试的,听说5.0以后改变z轴就可以放大无遮拦,请自行百度吧
setClipChildren(false);
setClipToPadding(false);设为false表示可以跨边界进行绘制,并且允许其在padding区域内绘制。
这两个可以在重写的view中设置,也可以在layout中设置
setChildrenDrawingOrderEnabled(true);设为true重新安排子控件顺序。
1.重写recycleview
public class NewLinearLayout extends RecyclerView {
private int mSelectedPosition=0;
public NewLinearLayout(Context context) {
super(context);
}
public NewLinearLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setChildrenDrawingOrderEnabled(true);
}
public NewLinearLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setChildrenDrawingOrderEnabled(true);
}
@Override
public void onDraw(Canvas c) {
mSelectedPosition = getChildAdapterPosition(getFocusedChild());
super.onDraw(c);
}
@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;
}
}
详情链接:https://blog.csdn.net/lbcab/article/details/54576425
2.重写linearlayout
@Override
protected int getChildDrawingOrder(int childCount, int i) {
if (position != -1) {
if (i == childCount - 1)
return position;
if (i == position)
return childCount - 1;
}
return i;
}
@Override
public void bringChildToFront(View child) {
position = indexOfChild(child);
postInvalidate();
}
重写linearlayout后,主界面使用时需lin.bringChildToFront(view);
@Override
public void onFocusChange(View view, boolean b) {
switch (view.getId()){
case R.id.image1:
case R.id.image2:
lin.bringChildToFront(view);
if (b){
setViewAnimator(view,true,1.5f);
}else {
setViewAnimator(view,false,1.5f);
}
break;
}
}
这个链接找不到了,但主要部分已经写出来了。