如果我理解正确,您在地图中设置了标记,当用户单击标记时,您将开始另一个活动。以下代码应该可以工作(在SupportMapFragment
):
getMap().setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// do the thing!
return true;
}
});
如果您没有标记并且想要收听某个位置,请单击使用此代替:
getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
// do the thing!
}
});
在这种情况下,您可能希望在用户单击“足够接近”到某个位置时启动活动。我使用这个库http://googlemaps.github.io/android-maps-utils/它包含方法
SphericalUtil.computeDistanceBetween(LatLng from, LatLng to)
它以米为单位返回两个LatLng
s 之间的距离。
编辑示例:
首先,您定义用户必须单击的位置以及该特定单击启动的活动:
private static final HashMap<LatLng, Class<? extends Activity>> sTargets = new HashMap();
static {
sTargets.put(new LatLng(34.0204989,-118.4117325), LosAngelesActivity.class);
sTargets.put(new LatLng(42.755942,-75.8092041), NewYorkActivity.class);
sTargets.put(new LatLng(42.352711,-83.099205), DetroitActivity.class);
}
private static final int RANGE_METERS = 200 * 1000; // 200 km range
然后当用户点击地图时,您计算到每个点的距离。如果合适,您将启动该活动。
getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng input) {
for(Map.Entry<LatLng,<? extends Activity>> entry : sTargets.entrySet()) {
LatLng ll = entry.getKey();
boolean inRange = SphericalUtil.computeDistanceBetween(input, ll) < RANGE_METERS;
if (inRange) {
Class<? extends Activity> cls = entry.getValue();
Intent i = new Intent(getActivity(), cls);
getActivity().startActivity(i);
break; // stop calculating after first result
}
}
}
});