我想知道如果我将 View 从一个 ViewGroup 移动到另一个 ViewGroup 时如何检测 subview ,尤其是在执行触摸事件时。有没有一种方法可以让我知道我“悬停”在哪些 View 上?

我现在正在做的是,当我在 View 上检测到 ACTION_MOVE 事件时,我将它提升到顶级父级,以便它可以在整个窗口内移动和绘制(而不仅仅是在它的原始父级边界内),然后我想将 View 移动到不同的 ViewGroup 并在 ACTION_UP 上将 View 附加到该 ViewGroup。

最佳答案

受到 Ami 响应的启发,但发现 MotionEvent#getX()/getY() 以及 View#getTop()/etc 返回父 View 的坐标,我最终执行以下操作以在屏幕坐标中进行操作,从而使我能够工作跨 View 组:

        private boolean inRegion(float x, float y, View v) {
            v.getLocationOnScreen(mCoordBuffer);
            return mCoordBuffer[0] + v.getWidth() > x &&    // right edge
                   mCoordBuffer[1] + v.getHeight() > y &&   // bottom edge
                   mCoordBuffer[0] < x &&                   // left edge
                   mCoordBuffer[1] < y;                     // top edge
        }

其在 OnTouchListener 中的用法是例如:
        boolean inside = inRegion(event.getRawX(), event.getRawY(), targetView);

关于android - 在执行触摸事件时,如何检测正在经过的 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4321056/

10-11 11:37