移动相机时移动以相机为中心的 google-maps 标记

Move camera-centered google-maps marker as you move the camera around

目标是捕获 lat/long 用户在地图中导航的位置。在它的正中央有一个标记。

这是我目前得到的结果:

    myMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
        @Override
        public void onCameraMove() {
            CameraPosition test = myMap.getCameraPosition();
            myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).anchor(0.5f, .05f).title("Test"));
            Log.d(TAG, "Map Coordinate: " + String.valueOf(test));
        }
    });

它有效,但正如您可能已经猜到的那样,它会创建数千个标记。我认为标记应该在移动侦听器外部创建,并在每次相机移动时动画到中心。

那么,我该如何实现呢?

只需保留一个始终指向当前中心的标记参考即可。然后,在放置新的时,如有必要,请移除旧的:

//Instance variable:
Marker mCenterMarker;

myMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
    @Override
    public void onCameraMove() {

        //Remove previous center if it exists
        if (mCenterMarker != null) {
            mCenterMarker.remove();
        }

        CameraPosition test = myMap.getCameraPosition();
        //Assign mCenterMarker reference:
        mCenterMarker = myMap.addMarker(new MarkerOptions().position(myMap.getCameraPosition().target).anchor(0.5f, .05f).title("Test"));
        Log.d(TAG, "Map Coordinate: " + String.valueOf(test));
    }
});

您可以创建一个通用标记变量,然后使用 setPosition(myMap.getCameraPosition().target)

根据相机更改它的位置
//Instance variable:
Marker mCenterMarker;

myMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {

    //Remove previous center if it exists

    CameraPosition test = myMap.getCameraPosition();
    //Assign mCenterMarker reference:
    mCenterMarker = setPosition(myMap.getCameraPosition().target)
    Log.d(TAG, "Map Coordinate: " + String.valueOf(test));
}

然后在其他地方定义 mCenterMarker。