this 是一个viewGroup
private static final Pools.Pool<Rect> sRectPool = new Pools.SynchronizedPool<>(12);
public boolean isPointInChildBounds(@NonNull View child, int x, int y) {
final Rect r = acquireTempRect();
getDescendantRect(child, r);
try {
return r.contains(x, y);
} finally {
releaseTempRect(r);
}
}
private static Rect acquireTempRect() {
Rect rect = sRectPool.acquire();
if (rect == null) {
rect = new Rect();
}
return rect;
}
void getDescendantRect(View descendant, Rect out) {
ViewGroupUtils.getDescendantRect(this, descendant, out);
}
private static void releaseTempRect(@NonNull Rect rect) {
rect.setEmpty();
sRectPool.release(rect);
}