首页 > 解决方案 > Android/谷歌地图——模拟谷歌地图设备定位焦点

问题描述

我正在寻求有关我的 Android 应用程序的帮助。

在 Google 地图中,当您单击 MyLocationButton 时,相机将锁定设备的移动,直到地图被拖走。我试图在我的地图中模拟这种行为。

我当前的代码能够返回设备的位置并锁定它。问题在于更新锁定/解锁状态。

我的想法是: - 默认情况下,相机锁定到设备上。- 当相机移动时,检查它停止时的位置。如果它停在设备位置的顶部,则相机仍处于锁定状态。ELSE 相机已解锁。

这是正确的方法还是有更好的方法?

谢谢,代码:

@Override
public void onMapReady(GoogleMap googleMap) {
    Log.d(TAG, "onMapReady: map loaded");
    Toast.makeText(this, "Eat Safe!", Toast.LENGTH_SHORT).show();
    map = googleMap;

    if (locationPermissionGranted) {
        getLastKnownLocation();
        map.setMyLocationEnabled(true);
        map.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() {
            @Override
            public boolean onMyLocationButtonClick() {
                Log.d(TAG, "onMyLocationButtonClick: camera locked");
                cameraLocked = true;
                return true;
            }
        });
        map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
            @Override
            public void onCameraIdle() {
                Log.d(TAG, "setOnCameraIdleListener: camera Idle");
                LatLng cameraPosition = map.getCameraPosition().target;
                if(cameraPosition.equals(myLocation)){
                    Log.d(TAG, "setOnCameraIdleListener: camera on top of device");

                }else{
                    Log.d(TAG, "setOnCameraIdleListener: camera unlocked");
                    cameraLocked = false;
                }
            }
        });
    }
}

标签: androidgoogle-maps

解决方案


好吧。我解决了。

我将 setOnCameraIdleListener 更改为 onCameraMove,这更有意义。

这样,每次相机移动时,检查相机是否在设备顶部。

然后,内部的 onCameraMove 需要考虑一些错误,因为它们会传回小数点值。


推荐阅读