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 会失去它已经拥有的自然翻转和缩放,那么我怎样才能在我的 MapView 中拥有一切?

谢谢你。

4

2 回答 2

1

有两种方法可以实现您正在寻找的内容,下面是代码:

@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 回答