2011-12-30 54 views
0

我對此堅持不懈,我嘗試了所有可能性,但沒有成功。我已經創建了簡單的應用程序與地圖進行測試和用戶可以簡單的觸摸地圖上,並在那個地方把標記。除了htc設備,這將在所有設備上成功運行。我不知道如何實現onTouch事件的MapViewmarker不能在htc的地圖上顯示

這裏是我的onTouch

private class MarkerOverlay extends Overlay{   
    private boolean isMove; 
    @Override 
    public boolean onTouchEvent(MotionEvent e, MapView mapView) {   
     final int x = (int) e.getX(); 
     final int y = (int) e.getY(); 
     if(e.getAction()==1){ 
      if(!isMove){ 
       geopoint = mapView.getProjection().fromPixels(x, y); 
       OverlayItem overlayItem = new OverlayItem(geopoint, "Title", "Description"); 
       if(mapOverlay.m_overlays.size()>=1){ 
        mapOverlay.clearOverlayAll(); 
       } 
       mapOverlay.addOverlay(overlayItem); 
       if(!mapView.getOverlays().contains(mapOverlay)) 
        mapView.getOverlays().add(mapOverlay); 

       mapView.invalidate(); 
       Toast.makeText(SimpleMapMarkerActivity.this, "in press", Toast.LENGTH_SHORT).show(); 
      }else{ 
       Toast.makeText(SimpleMapMarkerActivity.this, "out press", Toast.LENGTH_SHORT).show(); 
      } 
     }else if(e.getAction()==MotionEvent.ACTION_DOWN) 
      isMove = false; 
     else if(e.getAction()==MotionEvent.ACTION_MOVE) 
      isMove = true; 

     return super.onTouchEvent(e, mapView); 
    } 
} 
+0

我認爲在你的onTouchEvent(..)一個小小的瑕疵,你總是返回super.onTouchEvent(..)。如文檔中所述,如果您處理觸摸事件,則應該返回true,而默認實現只會返回false。 – harism 2011-12-30 09:30:53

+0

我嘗試返回true,但移動的地圖是停止 – Pratik 2011-12-30 10:11:07

+1

很明顯是的,如果您從ACTION_DOWN跟蹤整個觸摸手勢,直到ACTION_UP。還有Overlay.onTap(..)事件可用,您是否考慮過使用它來添加標記? – harism 2011-12-30 10:15:10

回答

0

我得到了解決這個解決方案由harism

給出每當你只需要實現與標記地圖就像點擊地圖並顯示市場,然後執行onTap(GeoPoint g, MapView mapview)

而且,如果要實現像用戶一樣移動的標記,例如拖放,然後通過使用onTouch()來實現。對於onTouch()和像拖動移動標記和刪除檢查此鏈接

http://www.edumobile.org/android/android-apps/mapmarkerexample/

0

代碼我有同樣的問題。我不知道它是否可以解決你的問題。但這是我做的:

我已經重寫了dispatchTouchEvent。它適用於我的三星Galaxy S2。

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    // TODO Auto-generated method stub 
    if(ev.getAction() == MotionEvent.ACTION_DOWN){ 
     xPos = ev.getX(); 
     yPos = ev.getY(); 
    } 
    if (ev.getAction() == MotionEvent.ACTION_UP){ 
     if (xPos==ev.getX() && yPos == ev.getY()){ 
     Log.i(LOG_TAG, "Calling onTouch from dispatchTouchEvent."); 
      onTouch(mapView, ev); 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

我doint這在mapActivity。不在overLay。

0

MapMarkerExample

這個例子告訴你如何繪製移動標記到地圖。您可以縮小並放下標記以更改其位置。可以在任何你想從用戶輸入地圖位置的應用程序中使用。

算法:

1)通過創建一個文件 - 新建項目>新建 - > Android的項目名稱是MapMarkerExample。 2.)你會在main.xml和android清單文件中看到一些默認代碼。 3)互聯網的權限添加到您的清單文件或寫android.manifest下列文件:

http://www.edumobile.org/android/android-apps/mapmarkerexample/

+0

我有這個例子,但運氣不好也這 – Pratik 2011-12-30 10:11:51