2012-02-23 151 views
4

可能重複:
OnTouch in MapView only fires the first time爲什麼MapView onTouchListener只觸發一次?

我想檢測用戶對地圖每一個接觸,因此我已經註冊了一個偵聽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

您是否嘗試過返回true而不是false? Mabey有一個問題,因爲你實際上並沒有消費觸摸事件,因爲它在周圍徘徊,不再被稱爲。

+0

是的,我沒試過,但它並沒有奏效。 – fulupr 2012-02-23 21:00:22

+0

嗡嗡聲。也許你可以嘗試onTouchEvent?您可以在MapActivity中重寫此方法 – 2012-02-23 21:02:44

+0

我不能@Override onTouchEvent方法,因爲活動只是擴展了Activity,因此它給我一個錯誤,指出「MainActivity類型的onTouchEvent(MotionEvent,MapView)方法必須重寫超類方法」。 – fulupr 2012-02-23 21:09:13

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 2012-02-24 17:48:28