2011-11-08 35 views
0

當我設置觸摸偵聽器來獲取觸摸位置lat long然後當我從我的代碼中刪除觸摸偵聽器時,放大和縮小工作不起作用。那麼如何實現在谷歌地圖上放大和縮小,並獲得觸摸位置拉長?放大和縮小在我的谷歌地圖Android上不工作

我的代碼如下

mapView = (MapView) findViewById(R.id.map); 
    mapView.setBuiltInZoomControls(true); 
    mapView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 

      public boolean onTouch(View v, MotionEvent event) { 
       Log.i("!!!!!","*****"); 

      //---when user lifts his finger--- 

       if (event.getAction() == MotionEvent.ACTION_UP) { 

        Projection p2 = mapView.getProjection(); 
        GeoPoint geoPoint = p2.fromPixels((int) event.getX(), (int)event.getY()); 
        int latitude = geoPoint.getLatitudeE6(); 
        int longitude = geoPoint.getLongitudeE6(); 
        String aString = Integer.toString(latitude); 
        String aString2 = Integer.toString(longitude); 

        Log.i("latitude,longitude",aString+",,"+aString2); 
        if((latitude < -34.538238) && (latitude > -34.672182)) 
        { 
         if((longitude < -58.347702) && (longitude > -58.528976)) 
         { 
         Log.i("lat,long",aString+",,"+aString2); 
         } 
         else 
         { 
          Log.i("out of region",aString+",,"+aString2); 

         }} 
        Log.i("@@@@@!!!!!","*****"); 



       } 
       return true; 

      } 


      }); 

回答

3

當你setOnTouchListenersetBuiltInZoomControls(true)將無法​​正常工作。 您可以通過命令displayZoomControls(true)顯示縮放按鈕。您的地圖不會縮放,不會通過觸摸或多點觸控移動,但您可以通過單擊縮放按鈕來縮放地圖。

另一種方式是當您不需要處理觸摸但需要縮放地圖時,通過mapView.setOnTouchListener(null)關閉偵聽器並縮放地圖setBuiltInZoomControls(true)。在您需要處理觸摸的時刻,您將設置聽衆mapView.setOnTouchListener(new OnTouchLister(...)),但通過觸摸放大機會會丟失。當不需要觸摸時,請執行mapView.setOnTouchListener(null)並再次使用setBuiltInZoomControls(true)來縮放地圖。

+0

Bang on,觸摸監聽器是問題。 @dkBose,爲什麼不接受這個答案? – Siddharth

0

試試這個。應該能夠獲得你之前做的縮放控件和GeoPoint的東西。

public boolean onTouchEvent(MotionEvent event,MapView m) { 
    boolean status = false; 
    int start,stop = 0; 
    long long_click_time = 1500; //1.5 seconds 
    if(e.getAction() == MotionEvent.ACTION_DOWN){ 
     start = event.getEventTime(); 
    } 

    if(e.getAction()==MotionEvent.ACTION_UP){ 
     stop = event.getEventTime(); 
    } 

    if(stop-start>long_click_time){ 
     //do your work 
     status = true; 
    } 

    return status; 
} 

返回false應該給你縮放控件。該方法應該在Overlay的子類中。在下面的代碼中,類「Touchy」從Overlay繼承。

List<Overlay> overlayList = this.map.getOverlays(); 
Touchy touchy = new Touchy(Maps.this); 
overlayList.add(touchy);