对于新的maps api,我注意到当您按下地图上的my location pin时,onMapClick()
和onMarkerClick()
都不会触发。
这对我来说意味着应该有一个监听器在某个地方监听我的位置触摸事件,但是我找不到任何。有人能解决这个问题吗?
我一直在考虑这样的解决办法:
禁用标准MyLocation
图标并创建一个普通标记,其功能类似于“我的位置”管脚。
myLocationPin = mMap.addMarker(new MarkerOptions()
.title("My Location")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.mylocation)));
并实施
LocationSource.OnLocationChangedListener
:public void onLocationChanged (Location location) {
myLocationPin.position(new LatLng(location.latitude, location.longitude));
}
但我有两个问题:
我不知道怎么关掉标记
我不知道如果我替换默认的
onLocationListener
,实现自己的LocationSource
是否会破坏任何标准功能。在上面找不到任何文档或源代码。 最佳答案
自从这个问题发布后,OnMyLocationChangeListener
被添加到api中,使得解决方法的实现(非常)简单(即不再需要自定义的LocationSource
)。
因此,您可以在我的位置点上方绘制一个Marker
(带有类似图标)以接收相应的onMarkerClick()
回调。
public class DemoMapFragment extends SupportMapFragment implements OnMyLocationChangeListener, OnMarkerClickListener {
// Note that 'mMap' may be null if the Google Play services APK is not available.
private GoogleMap mMap;
private Marker myLocationMarker;
private static BitmapDescriptor markerIconBitmapDescriptor;
/* ... */
@Override
public void onResume() {
super.onResume();
setUpMapIfNeeded(); // Get a reference to the map
mMap.setMyLocationEnabled(true); // Enable the my-location layer
mMap.setOnMyLocationChangeListener(this);
mMap.setOnMarkerClickListener(this);
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
mMap = getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
// The Map is verified. It is now safe to manipulate the map:
// Load custom marker icon
markerIconBitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.my_location_dot_icon);
// When the map is first loaded we need to add our marker on top of My Location dot
myLocationMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(mMap.getMyLocation().getLatitude(),mMap.getMyLocation().getLongitude()))
.icon(markerIconBitmapDescriptor));
// Set default zoom
mMap.moveCamera(CameraUpdateFactory.zoomTo(15f));
}
}
}
@Override
public void onMyLocationChange(Location location) {
// Remove the old marker object
myLocationMarker.remove();
// Add a new marker object at the new (My Location dot) location
myLocationMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(location().getLatitude(),location().getLongitude()))
.icon(markerIconBitmapDescriptor));
}
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.equals(myLocationMarker)) {
/* My Location dot callback ... */
}
}
}
关于android - 收听Google Maps API v2中的“我的位置”图标点击事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14383498/