我的问题与您的问题完全相同。 我的解决方案有点不同。我正在尝试编写一个backammon游戏。我有30个物体放置在屏幕上并移动它们。当然,其中一些重叠。所以我的问题是我触摸了一个物体,最后移动了另一个物体(从我认为这是一个物体放置在屏幕上后,我触摸的那个和我触摸的那个物体的左侧)。
不管怎样,我所做的就是创建一个扩展视图中的自定义对象并将其放在GestureOverlayView。我覆盖的onTouchEvent(),它看起来是这样的:
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getRawX();
int y = (int) event.getRawY();
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
if (Math.abs(x - this.getX()) < BackgroundView.slotSize && Math.abs(y - this.getY()) < BackgroundView.slotSize) {
//do whatever I want
return true;
} else {
return false;
}
//break;
case MotionEvent.ACTION_MOVE:
//this is the dragging part
this.setX(x - size/2);
this.setY(y - size/2);
break;
case MotionEvent.ACTION_
break;
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_OUTSIDE:
break;
default:
}
return true;
}
从我读,当我返回false,动作不消耗,所以另一个对象可以做到这一点。基本上,没有任何对象会消耗它,直到通过返回true来消除它。
我仍然认为我是一个新手,我觉得有更好的方法可以做到这一点,但它的工作原理很适合我。希望能帮助到你。你或别人。 我接受新的建议。
人力资源管理模式,似乎低效的遍历所有的“可触摸”的对象来检查冲突(或任何事件)...但它似乎是在Android的世界所做的那样的。 – Overunity 2012-02-13 05:54:26
环顾四周后,似乎是这样做的。如果不需要准确的精度,我强烈建议使用Android的Rect类进行检测。 – YumeApps 2012-02-13 06:37:01