我想知道如果我将 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/