如何知道用户何时在谷歌地图中移动地图?

时间:2018-03-19 17:34:30

标签: android google-maps

我有一个非常简单的应用程序,只有一个活动。每次我启动应用程序时,相机都会移动到我的位置。我使用LocationCallback所以每当我改变位置时,相机都跟着我:

locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        if (locationResult == null) {
            return;
        }
        for (Location location : locationResult.getLocations()) {
            currentLocation = location;
            LatLng latLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
            if (isFollowing) {
                moveCamera(latLng, DEFAULT_ZOOM);
            }
        }
    }
};

如您所见,我有一个布尔isFollowing,默认设置为true。问题是当用户尝试将地图移动到另一个点时,相机会再次开始跟随。

我还在LocationButton上添加了点击监听器,以确保在用户点击它的那一刻,摄像机会跟着它。

mMap.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener(){
    @Override
    public boolean onMyLocationButtonClick() 
        isFollowing = true;
        return false;
    }
});

问题是,如何将isFollowing设置为flase,以便相机在移动地图时停止跟踪用户?

我在SOF上发现了一些帖子,但只有OnMyLocationChangeListener,我看到这个帖子已被弃用。

2 个答案:

答案 0 :(得分:0)

您可以使用GoogleMap.OnCameraMoveStartedListenerGoogleMap.OnCameraIdleListener。请参阅一些示例here

在你的情况下:

mMap.setOnCameraMoveStartedListener(this);
mMap.setOnCameraIdleListener(this);

...

@Override
public void onCameraMoveStarted(int reason) {
    if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
        isFollowing = false;
    }
}

@Override
public void onCameraIdle() {
    // You may want to set isFollowing = true here
}

答案 1 :(得分:0)

对于未来的访问者,我通过在布局文件中创建一个不可见的叠加层来解决这个问题。我添加了一个简单的TextView,如下所示:

<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/invisible_text_view"/>

然后在我的活动中使用setOnTouchListener并设法将isFollowing变量的值更改为false,如下所示:

View invisibleTextView = findViewById(R.id.invisible_text_view);
invisibleTextView.bringToFront();
invisibleTextView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        isFollowing = false;
        return false;
    }
});