判断当前触摸位置是否在指定child的范围内

162 阅读1分钟

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);
}