【问题标题】:Recognise click over current location marker in Android Google Maps在 Android 谷歌地图中识别点击当前位置标记
【发布时间】:2014-12-30 00:06:14
【问题描述】:
在适用于 Android 的 Google Maps V2 中,识别用户单击当前位置标记(带有白色边框的蓝色标记)时的最佳选择是什么?
我在互联网上没有任何例子,我能想象的唯一方法是:
googleMap.setOnMapClickListener(new OnMapLongClickListener() {
@Override
public void onMapClick(LatLng point) {
// currentLocation is the location set by onLocationChanged method
if (currentLocation != null
&& (currentLocation.getLatitude() == point.latitude
&& currentLocation.getLongitude() == point.longitude)) {
toastIt("Click over current position!");
}
}
});
【问题讨论】:
标签:
android
google-maps-android-api-2
【解决方案1】:
您可以添加用户位置标记并参考它的 id:
mUserMarkerId = mMap.addMarker(new MarkerOptions().position(latLng)
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)))
.getId();
使用onMarkerClickListener,您可以检测点击的标记是否是用户标记
mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.getId().equalsIgnoreCase(mUserMarkerId))
// Clicked user marker
}
return true;
}
});
【解决方案2】:
这是更好的解决方案
map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng)
{
Location location=getLocation();
if(map.isMyLocationEnabled()&&location!=null)
{
float distance[]=new float[1];
Location.distanceBetween(location.getLatitude(), location.getLongitude(), latLng.latitude, latLng.longitude, distance);
if(distance[0]<location.getAccuracy())
{
Log.d(TAG, "onMapClick: It is user!");
}
}
}
});
【解决方案3】:
我知道现在已经晚了,但对于任何搜索此内容的人来说
现在原生支持(自 2017 年 9 月 18 日起)
来自下面提到的页面:
使用新的 GoogleMap.OnMyLocationClickListener 来检测用户何时单击“我的位置”蓝点。 (问题 35822305)
@Override
public void onMyLocationClick(@NonNull Location location) {
Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
}
我建议关注此页面以获取最新更新
https://developers.google.com/maps/documentation/android-api/releases