0

我的应用程序中有一个 MapView。我在其中有很多 OverlayItems 带有一点可绘制标记。

如果我触摸一个覆盖项,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

有任何想法吗?

4

1 回答 1

3

您的代码不起作用,因为在发生or时onTap()触发了,而不是or 。MotionEvent.ACTION_POINTER_UPMotionEvent.ACTION_UPMotionEvent.ACTION_POINTER_DOWNMotionEvent.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:我正在使用地图中心来测试缩放,因为多点触控缩放围绕位于手指中心之间的地图点工作,导致缩放时中心发生变化。您还可以使用地图经度跨度。

于 2012-11-11T12:25:58.390 回答