3

Google マップで実際の場所を表示する次のコードがあります。

public class LocationProjectActivity extends MapActivity implements OnTouchListener {
private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
private MyOverlays itemizedoverlay;
private MyLocationOverlay myLocationOverlay;
private GeoPoint MyPoint;
public static int longitude;
public static int latitude;
private GeoPoint destinationPoint;

public void onCreate(Bundle bundle) {
  super.onCreate(bundle);
  setContentView(R.layout.main);
  mapView = (MapView) findViewById(R.id.mapview);
  mapView.setBuiltInZoomControls(true);
  mapView.setSatellite(true);
  mapView.computeScroll();
  mapController = mapView.getController();
  mapController.setZoom(13);
  locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new GeoUpdateHandler());
  myLocationOverlay = new MyLocationOverlay(this, mapView);
  mapView.getOverlays().add(myLocationOverlay);
  myLocationOverlay.runOnFirstFix(new Runnable() {
    public void run() {
      mapView.getController().animateTo(myLocationOverlay.getMyLocation());
    }
  });
}

@Override
public boolean onTouch(View v, MotionEvent event) {
  System.out.println("SCREEN WAS CLICKED");
  return true;
}

私がやりたいのは、画面に触れたときにキャッチすることですが、メソッドが呼び出されることはありません。私はすでに検索してこれを見つけました: マップ内のOnTouch

私はすべてを試しましたが、機能する唯一のコードは次のとおりです。

mapView.setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    // Your code and remember to return true!        
    return (true);
  }
});

問題は、このコードを使用すると、MapView が既に持っている自然なフリングとズームを失うことです。

ありがとうございました。

4

2 に答える 2

1

あなたが探しているものを達成することができる2つの方法があります、そして以下はコードです:

@Override 
      public boolean onTap(GeoPoint p, MapView mapView) {
            Log.d("tap event ", "tap called");
            mapOverlays = mapView.getOverlays();
            drawable  =getResources().getDrawable(R.drawable.marker);
            itemizedOverlay = new SitesOverlay(drawable);
            int lat=(int)p.getLatitudeE6();
            int lng=(int)p.getLongitudeE6();


            GeoPoint point = new GeoPoint(lat,lng);
            Log.d("tap event ", "tapcalled"+lat+""+lng);
            OverlayItem overlayitem = new OverlayItem(point, "", "");

            items.add(overlayitem);
            populate();
            Log.d("tap event ", "populated");
            //      mapOverlays.add(itemizedOverlay);   


            return true;
        }

この方法でこれを行うことができますが、これはマップ上にオーバーレイアイテム/ピン/マーカーを追加しません。

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

マップ上の任意の場所でタッチを検出するためのチュートリアルへのリンクは次のとおりです

MapViewのタッチを検出する

マップ上にマーカー/ピン/アイテムをオーバーレイし、各ピン/マーカーのクリックを検出するには

MapViewでマーカーのタッチを検出する

これがお役に立てば幸いです:)

ありがとう。

于 2012-07-21T20:56:35.450 に答える
0

画面をタッチしたときに表示したいだけの場合でも、falseを返すことができます。これにより、他のすべてのドラッグおよびズームタッチイベントが機能します。

別のタッチイベントを他のイベントに継続させたくない場合にのみ、trueを返します。

于 2012-07-21T19:26:06.187 に答える