因此,我遵循了 2D 图形教程(感兴趣的人,这是 @ http://droidnova.com/ ),并且我在 onTouchEvent() 回调中遇到了不断崩溃的情况。我仍在尝试跟踪该错误,但在尝试调试该问题时,我注意到每个事件都会调用我的 onTouchEvent 回调两次。
供引用
@Override
public boolean onTouchEvent(MotionEvent event)
{
int action = event.getAction();
synchronized (getHolder()) {
if (action == MotionEvent.ACTION_DOWN) {
if (gameObjects.size() < 2) {
currentlySelected = new GameObject(BitmapFactory.decodeResource(getResources(), R.drawable.icon));
currentlySelected.getCoordinates().setX((int) event.getX());
currentlySelected.getCoordinates().setY((int) event.getY());
} else {
for (GameObject gameObject: gameObjects) {
if (gameObject.inBoundingBox(event.getX(), event.getY())) {
currentlySelected = gameObject;
break;
}
}
if (currentlySelected != null) {
// Remember to remove it from the list so that we don't waste time updating it in updatePhysics twice.
gameObjects.remove(currentlySelected);
}
}
} else if (action == MotionEvent.ACTION_UP && (currentlySelected != null)) {
gameObjects.add(currentlySelected);
currentlySelected = null;
} else if (action == MotionEvent.ACTION_MOVE) {
currentlySelected.getCoordinates().setX((int) event.getX());
currentlySelected.getCoordinates().setY((int) event.getY());
}
}
不,当我在第一行放置断点并在 Debug模式下运行它时,当我触摸屏幕时,会通过以下操作调用回调...
- 操作 = 0 (MotionEvent.ACTION_DOWN)
- 操作 = 0 (MotionEvent.ACTION_DOWN)
- 操作 = 1 (MotionEvent.ACTION_MOVE)
- 操作 = 1 (MotionEvent.ACTION_MOVE)
- 操作 = 2 (MotionEvent.ACTION_UP)
- 操作 = 2 (MotionEvent.ACTION_UP)
对于每个操作,第二个操作都会在同步调用处退出。有人知道这种行为的原因吗?
最佳答案
事实证明,问题出在线路上
synchronized (getHolder()) {
确实应该这样
SurfaceHolder h = getHolder()
syncronized(h) {
这似乎解决了我的问题。
关于java - Android 2.2 SurfaceView#onTouchEvent() 每个事件被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5176555/