对于新的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/

10-08 21:00