在source code of 2.3中,您可以在invalidate()
中看到以下代码段:
final Rect r = ai.mTmpInvalRect;
r.set(0, 0, mRight - mLeft, mBottom - mTop);
// Don't call invalidate -- we don't want to internally scroll
// our own bounds
p.invalidateChild(this, r);
这意味着此功能不考虑mScrollX / mScrollY。
在invalidate(int, int, int, int)
中:
final int scrollX = mScrollX;
final int scrollY = mScrollY;
final Rect tmpr = ai.mTmpInvalRect;
tmpr.set(l - scrollX, t - scrollY, r - scrollX, b - scrollY);
p.invalidateChild(this, tmpr);
使用当前滚动位置偏移脏区。
我编写了一个简单的测试应用程序并使用这两种方法(invalidate()
和invalidate(0,0,getWidth(),getHeight())
)在android 2.3上运行它,结果是一样的。那么管道如何使它们具有相同的效果呢?