0

アプリでMapViewを取得しました。少し描画可能なマークが付いたOverlayItemがたくさんあります。

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

何か案は?

4

1 に答える 1

3

onTap()またはが発生したときにが発生し、MotionEvent.ACTION_POINTER_UPまたはMotionEvent.ACTION_UPが発生しないため、コードが機能していませMotionEvent.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 に答える