2012-02-23 4 views
4

可能性の重複:
OnTouch in MapView only fires the first timeなぜMapView onTouchListenerは1回だけ起動されるのですか?

私はマップにユーザーによって行われたので、私はのMapViewのインスタンスのリスナーを登録しているすべてのタッチを検出します。しかし、このリスナーは一度しか呼び出されません。その後、私はアプリケーションを閉じてから、再び動作させる必要があります。私はOsmDroidを使用しています。

 mMapView = (MapView) findViewById(R.id.mapview); 

    mMapView.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      System.out.println("OnTouch MapView Listener!"); 
      return false; 
     } 
    }); 

答えて

1

falseの代わりにtrueを返そうとしましたか? Mabeyには問題があります。なぜなら、あなたが実際にタッチイベントを消費していないからです。それは、それがもう周りに残っていて、もはや呼び出されないようにしています。

+0

はい私はそれを試みたが、うまくいかなかった。 – fulupr

+0

Hum。代わりにonTouchEventを試すことができますか?このメソッドは、MapActivityでオーバーライドすることができます –

+0

onTouchEventメソッドをオーバーライドすることはできません。アクティビティがアクティビティを拡張するだけなので、「MainActivityのメソッドonTouchEvent(MotionEvent、MapView)メソッドはスーパークラスメソッドをオーバーライドする必要があります。 – fulupr

1

私はそれが二度以上働くことはありませんでした。私は何もせずオーバーレイにonTouchEvent()を置くオーバーレイを追加しました。これはうまくいった。

public class OsmdroidDemoMap extends Activity { 

    private MapView mMapView; 
    private MapController mMapController; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.osm_main); 
     mMapView = (MapView) findViewById(R.id.mapview); 
     mMapView.setTileSource(TileSourceFactory.MAPNIK); 
     mMapView.setBuiltInZoomControls(true); 
     mMapView.setMultiTouchControls(true); 
     mMapController = mMapView.getController(); 
     mMapController.setZoom(13); 
     GeoPoint gPt = new GeoPoint(51500000, -150000); 
     mMapController.setCenter(gPt); 
     MapOverlay movl = new MapOverlay(this); 
     mMapView.getOverlays().add(movl); 
    } 

    public class MapOverlay extends org.osmdroid.views.overlay.Overlay { 

     public MapOverlay(Context ctx) {super(ctx);} 

     @Override 
     protected void draw(Canvas c, MapView osmv, boolean shadow) { } 

     @Override 
     public boolean onTouchEvent(MotionEvent e, MapView mapView) { 
      if(e.getAction() == MotionEvent.ACTION_DOWN) 
       Toast.makeText(OsmdroidDemoMap.this, "Touched", Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
    } 
} 
+0

私はそれをやってみましたが、mMapView.getOverlays()。add(movl); 'タッチするたびに私の地図を傾けるようにしました。その理由は、OsmDroidからItemizedOverlayを実装しているという事実だと私は思っています。 – fulupr

関連する問題