注意这里的draw方法是带三个参数的,与我们通常讲的带一个参数的draw方法不一样。在View类中找到带三个参数的draw方法,发现里面有这么一段代码:
[AppleScript] 纯文本查看 复制代码
if (!hasDisplayList) {
// Fast path for layouts with no backgrounds if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW){ mPrivateFlags &= ~PFLAG_DIRTY_MASK; dispatchDraw(canvas); } else { draw(canvas); }}
[Java] 纯文本查看 复制代码
getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override public void onGlobalLayout() { getViewTreeObserver().removeGlobalOnLayoutListener(this);
//do something you like //for example, get view width or height height } });
ViewTreeObserver.OnPreDrawListener当一个视图树将要绘制时的监听器,一般的使用姿势是:
[Java] 纯文本查看 复制代码
getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override public boolean onPreDraw() {
//do something before draw //for example, request a new layout return true; } });