我正在尝试制作这样的东西:我有一个mapactivity,当用户点击地图时,它会显示该位置的坐标。我已经覆盖了onclick方法,但它甚至没有被调用。有什么想法吗?
public class MapPoint extends MapActivity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mappoints);
MapView map = (MapView)findViewById(R.id.mapview);
map.setOnClickListener(this);
map.setBuiltInZoomControls(true);
map.getController().setZoom(18);
map.getController().setCenter(new GeoPoint(39735007, -8827330));
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
public void onClick(View arg0) {
Toast.makeText(this, "text", Toast.LENGTH_SHORT);
}
}
答案 0 :(得分:17)
尝试以下方法。
编写一个派生自Overlay类的类并覆盖onTap()方法。然后,您可以将叠加层添加到MapView。当您在地图上的某个位置选项卡时,GeoPoint对象(表示您点击的位置)将传递给onTap()方法。
答案 1 :(得分:7)
onClick()
。您需要覆盖onTouchEvent()
。 Here is a sample project显示使用onTouchEvent()
拖放ItemizedOverlay
地图图钉。
根据触摸的屏幕坐标,您可以使用Projection
(来自getProjection()
上的MapView
)将其转换为纬度和经度。
答案 2 :(得分:3)
使用Android Maps v2的现代答案是使用OnMapClickListener,它可以在地图上轻触LatLng。
答案 3 :(得分:2)
我在这个问题中提供了一些实施细节: How do I respond to a tap on an Android MapView, but ignore pinch-zoom?
我在使用onTap()时遇到的问题是,当你进行双指缩放时它也会被触发,这不是我的应用所需要的。因此,如果您需要双指缩放,我的代码应该可以满足您的需求。
答案 4 :(得分:2)
试试这个:
private class OverlayMapa extends Overlay {
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
...
}
@Override
public boolean onTap(GeoPoint point, MapView mapView)
{
Context contexto = mapView.getContext();
String msg = "Lat: " + point.getLatitudeE6()/1E6 + " - " +
"Lon: " + point.getLongitudeE6()/1E6;
Toast toast = Toast.makeText(contexto, msg, Toast.LENGTH_SHORT);
toast.show();
return true;
}
}
答案 5 :(得分:0)
像@CommonsWare所说,你需要使用onTouch()
函数,而不是onClick()
。以下是一个示例,这正是您所需要的:http://mobiforge.com/developing/story/using-google-maps-android