我有一个非常简单的应用程序,只有一个活动。每次我启动应用程序时,相机都会移动到我的位置。我使用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
,我看到这个帖子已被弃用。
答案 0 :(得分:0)
您可以使用GoogleMap.OnCameraMoveStartedListener
和GoogleMap.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;
}
});