2012-09-27 57 views
0

我有一個具有觸摸事件的MapActivity。MapActivity強制關閉,觸摸事件無情地觸發

在觸摸事件:

  • 我得到當前地址解析

  • 將覆蓋圖像上的位置。

  • 並將其設置爲mapview的中心。

這似乎工作正常,如預期的一段時間。但是,然後申請部隊關閉。我認爲即使沒有任何東西被觸摸,觸摸事件也會像瘋了一樣被解僱。我知道,因爲我已經舉行了一次敬酒,表明了被觸摸的位置的經度和姿態。即使沒有任何東西被觸動,它也會一直顯示出來。

我似乎無法準確定位問題,更不用說修復它了。這裏的觸摸事件對我mapActivity

private void LocationStuffs(double latitude, double longitude){ 
    itemizedOverlay.clear(); 
    itemizedOverlay.addOverlayItem((int)latitude, (int)longitude, "place"); 
    mapView.invalidate(); 
    mapView.getOverlays().add(itemizedOverlay); 
    MapController mc = mapView.getController(); 
    mc.setCenter(new GeoPoint((int)latitude, (int)longitude)); 
    mc.setZoom(20); 
} 

public boolean onTouchEvent(MotionEvent event, MapView mapView){ 
     //---when user lifts his finger--- 
     if (event.getAction() == 1) { 
      GeoPoint p = mapView.getProjection().fromPixels(
        (int) event.getX(), 
        (int) event.getY()); 
      Toast.makeText(getBaseContext(), 
        p.getLatitudeE6()/1E6 + "," + 
          p.getLongitudeE6() /1E6 , 
          Toast.LENGTH_SHORT).show(); 
      latitude = p.getLatitudeE6()/1E6; 
      longitude = p.getLongitudeE6()/1E6; 
      LocationStuffs(latitude*1E6, longitude*1E6); 
     } 
     return false; 
    } 
+3

如果你的應用程序崩潰,你應該總是發表您的logcat的錯誤。 – Sam

+0

是的,它會被調用很多次。爲了解決這個問題,當'if(event.getAction()== 1)'時,在隨後的調用中保存事件的位置,檢查新位置是否在保存位置附近;如果是這種情況,請勿再次輸入if塊。正如@Sam所說,發佈你的logcat。 –

+0

謝謝。這可能會解決問題。但我不明白爲什麼這次觸發事件經常被解僱?它是否應該只在地圖被觸摸時纔會觸發?或者它以不同的方式工作? –

回答

2

更改return語句返回true:

return true; 

基本上,這是什麼做的是,它會告訴你已經辦理的TouchEvent系統。讓我知道如果解決它。

1

我相信你在你的代碼的幾個誤區:

1 - 你需要一個「返回true」語句,你在「的onTouchEvent」方法關閉「if」語句之前。這告訴系統該事件已被處理並且應該被消耗。這可能是多點觸摸的原因。

2-「mapView.invalidate();」應該移動到「LocationStuffs」方法的末尾,因爲您希望在添加新位置之後而不是之前進行屏幕重繪。

3-您正在向mapview重複添加相同的itemizedOverlay。在調用你的「LocationStuffs」方法10次之後,你將有相同的疊加層疊加10次到疊加列表中。您應該添加Itemizedoverlay只有一次,這個方法外(上的onCreate或的onResume例如)

好運

+0

非常感謝。有效。 –