2011-11-08 7 views
0

タッチ位置を取得するためにタッチリスナーを設定すると、コードからタッチリスナーを削除したときにズームイン/ズームアウトが機能しません。それで、どのようにGoogleマップでズームインしたりズームアウトしたりすることができますか?あなたがsetOnTouchListenerあなたsetBuiltInZoomControls(true)が動作しません場合はAndroidのGoogleマップでズームイン/アウトが機能しない

私のコードは

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

を下回っています。 コマンドdisplayZoomControls(true)でズームボタンを表示することができます。あなたの地図はズームされず、タッチまたはマルチタッチで移動することはありませんが、ズームボタンをクリックすることでマップをズームすることができます。

もう1つの方法は、処理タッチを必要としない場合にリスナーをmapView.setOnTouchListener(null)で、ズームマップをsetBuiltInZoomControls(true)で終了することですが、ズームマップが必要です。タッチを処理する必要がある瞬間に、リスナーmapView.setOnTouchListener(new OnTouchLister(...))を設定しますが、タッチによる機会のズームは失われます。タッチが不要な場合はmapView.setOnTouchListener(null)、もう一度setBuiltInZoomControls(true)にズームしてください。

+0

オンにすると、タッチリスナーが問題になりました。 @ 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を返すと、ズームコントロールが表示されます。このメソッドは、オーバーレイのサブクラスになければなりません。下のコードでは、 "Touchy"クラスはオーバーレイから継承しています。

List<Overlay> overlayList = this.map.getOverlays(); 
Touchy touchy = new Touchy(Maps.this); 
overlayList.add(touchy); 
関連する問題