2011-01-26 10 views
11

私はアクティビティでMapViewを持っていて、地図が表示され、タップに反応し、場所を簡単に抽出できます。しかし、このハンドラはピンチズームにも対応しているので、ユーザがピンチズームしようとすると、アプリはタップしたように応答します(それは非常に混乱します)。Android MapViewのタップにはどのように反応しますが、ピンチズームは無視しますか?

MapViewのタップに応答して、シングルタップのみをピックアップする、ピンチズームとダブルタップを特に無視するにはどうすればよいですか?

OnTap()の代わりにOnTouchEvent()を使用する必要がありますか?もしそうなら、私はどのようにして異なるタッチイベントを区別し、ジオポイントにアクセスするのですか?

は、ここに私のMapActivity内部からのコードです:

class MapOverlay extends com.google.android.maps.Overlay 
{ 
    @Override 
    public boolean onTap(GeoPoint p, MapView map) 
    { 
     if (p!=null) 
     { 
      // Do stuff with the geopoint 
      return true;         // We handled the tap 
     } 
     else 
     { 
      return false;        // We didn't handle the tap 
     } 
    } 
} 
+0

オーバーレイ項目は同様に、(マップ上の任意の場所ではなく)タップ、まだピンチを無視するのMapView上のタッチリスナーを設定しているときにのみ応答するように設計されてONTAPを、使用し続けることができるかもしれませんこれは:http://stackoverflow.com/questions/4626028/how-to-disable-pinch-in-android-mapview –

+0

興味深いことに、地図をドラッグしても問題ありません。そのため、ドラッグはタップでは発生しませんが、タップは(期待通り)だけでなく、ピンチ&ズームも行います。私が期待していたことではありません。 –

+0

私はピンチ&ズームを無効にしたくない、私はそれが働きたい、私はちょうど私のアプリにもonTapをピックアップしたい。 –

答えて

27

ずっと頭スクラッチと試みる様々なアプローチの後、この1つは、これまでうまく機能しています。コードはモーションイベントに従います。 ACTION_DOWNイベントが発生すると、isPinchフラグはfalse(まだピンチであるかどうかはわかりません)とマークされますが、2つの指を含むタッチイベント(ACTION_MOVE)を取得すると、isPinchはonTap()イベントが発生すると、ピンチがあるかどうかを確認できます。

class MapOverlay extends com.google.android.maps.Overlay 
{ 
private boolean isPinch = false; 

@Override 
public boolean onTap(GeoPoint p, MapView map){ 
    if (isPinch){ 
     return false; 
    }else{ 
     Log.i(TAG,"TAP!"); 
     if (p!=null){ 
      handleGeoPoint(p); 
      return true;   // We handled the tap 
     }else{ 
      return false;   // Null GeoPoint 
     } 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent e, MapView mapView) 
{ 
    int fingers = e.getPointerCount(); 
    if(e.getAction()==MotionEvent.ACTION_DOWN){ 
     isPinch=false; // Touch DOWN, don't know if it's a pinch yet 
    } 
    if(e.getAction()==MotionEvent.ACTION_MOVE && fingers==2){ 
     isPinch=true; // Two fingers, def a pinch 
    } 
    return super.onTouchEvent(e,mapView); 
} 

} 
+0

素晴らしい!まさに私が探していたもの。私はあなたに+2を与えるだろう! :) – Kimi

+0

+1完璧、ありがとう:) – Dori

+0

ありがとう、私はまったく同じ問題を抱えていることを理解する前に、この質問を見つけました!すぐにソリューションを持っているニース=) –

関連する問題