我正在使用谷歌地图应用程序,用户可以触摸地图并在地图上标记起点和终点。然后在地图上绘制连接两点的路径。 为了处理触摸事件,我在MapOverlay类中实现了onTouchEvent方法。 我观察到地图有些奇怪的行为。当用户获得连接两个点的路径时,地图会冻结,即我无法平移或缩放地图。 我发现如果在MapOverlay方法内的onTouchEvent中返回值为true,则地图在上述情况下冻结。如果我返回false,那么map将不会冻结。但是,如果我想再次在地图上标记新点,应用程序崩溃... onTouchEvent的返回值如何与此行为相关?
答案 0 :(得分:1)
如果返回true,则处理程序告诉系统它处理了onTouchEvent并且系统不会调用另一个onTouchListener。如果返回false,则告诉系统,您没有处理触摸事件,它将调用基础视图的onTouchListener。您的地图不会冻结,但它不会获得任何触摸事件,因为您的处理程序会处理它们。
答案 1 :(得分:1)
onTouchEvent()
甚至可行的方式是,如果您返回true,则表示触摸事件已处理,Android将不会继续沿视图层次结构处理触摸事件。如果您返回false,它将继续。
在这种情况下,当您总是返回true时,您总是说触摸事件已被处理。因此,您所做的任何手势都将永远无法处理,因为您说它已经处理过了。因此,看起来地图冻结了。相反,提出这样的条件:
@Override
public boolean onTouchEvent(MotionEvent event){
boolean wasHandled = false;
if(/* condition where your touch event was handled */)
wasHandled = true;
else
wasHandled = super.onTouchEvent(event);
return wasHandled;
}
当你返回false时它崩溃的原因是程序中的一个问题,或者它进入一个循环,因为事件从未被处理过。