我的应用程序中有一个MapView。 我有很多OverlayItems,带有一点标记。
如果我触摸一个overlayitem,onTap()方法会运行,我会得到一个小对话框。 它工作得很好,但有时当我尝试使用多点触控进行缩放时,我的手指位于叠加层的顶部,在完成缩放后会出现对话框。它有点儿,因为它不是那么符合人体工程学,因为你必须在缩放后关闭即将出现的对话框。
我该怎样阻止我的应用程序参加此活动? 我不希望onTap()在我缩放时运行。
我尝试使用onTouch事件和2个布尔但不能正常工作:
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
int action = event.getAction() & MotionEvent.ACTION_MASK;
switch (action) {
case MotionEvent.ACTION_DOWN: {
actionIsDown= true;
break;
}
case MotionEvent.ACTION_POINTER_DOWN: {
pointerIsDown=true;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
pointerIsDown= false;
break;
}
case MotionEvent.ACTION_UP: {
actionIsDown= false;
break;
}
}
return super.onTouchEvent(event, mapView);
}
onTap:
@Override
protected boolean onTap(int index)
{
if(pointerIsDown==false && actionIsDown==false){ //...dialog here
有什么想法吗?
答案 0 :(得分:2)
您的代码无效,因为onTap()
或MotionEvent.ACTION_POINTER_UP
发生MotionEvent.ACTION_UP
或MotionEvent.ACTION_POINTER_DOWN
时会触发MotionEvent.ACTION_DOWN
。
要正确测试,您需要在UP
操作期间检查是否使用了移动来缩放地图,然后将其保存到布尔值。
示例代码:
Geopoint center = new Geopoint(0,0);
Boolean ignoreTap = false;
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
int action = event.getAction() & MotionEvent.ACTION_MASK;
switch (action) {
case MotionEvent.ACTION_POINTER_DOWN: {
case MotionEvent.ACTION_DOWN: {
center = mapView.getMapCenter();
ignoreTap = false;
break;
}
case MotionEvent.ACTION_UP: {
case MotionEvent.ACTION_POINTER_UP: {
if(center != mapView.getMapCenter())
ignoreTap = true;
break;
}
}
return super.onTouchEvent(event, mapView);
}
和onTap()
:
@Override
protected boolean onTap(int index)
{
if(!ignoreTap){ //...dialog here
Note:
我正在使用地图中心测试缩放,因为多点触控缩放工作在手指中心之间的地图点周围,导致缩放时中心变化。你也可以使用地图经度范围。