}
} else {
}
}
在这里创建了弱引用对象
public View inflate() {
final ViewParent viewParent = getParent();
if (viewParent != null && viewParent instanceof ViewGroup) {
if (mLayoutResource != 0) {
mInflatedViewRef = new WeakReference<>(view);
return view;
} else {
throw new IllegalArgumentException(“ViewStub must have a valid layoutResource”);
}
}
}
首先先看一段源码,如下所示:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(0, 0);
}
@Override
public void draw(Canvas canvas) {
}
@Override
protected void dispatchDraw(Canvas canvas) {
}
有没有觉得很与众不同
draw和dispatchDraw虽然重写了,但是看代码却都是什么也不做!并且onMeasure还什么也不做,直接setMeasuredDimension(0,0);来把view区域设置位0,原来一个ViewStub虽然是一个view,却是一个没有任何显示内容,也不显示任何内容的特殊view,并且对layout在加载时候不可见的。
具体看一下setWillNotDraw(true)方法,代码如下:
public void setWillNotDraw(boolean willNotDraw) {
setFlags(willNotDraw ? WILL_NOT_DRAW : 0, DRAW_MASK);
}
View中,对于WILL_NOT_DRAW是这样定义的:
/**
-
This view won’t draw. {@link #onDraw(android.graphics.Canvas)} won’t be
-
called and further optimizations will be performed. It is okay to have