【发布时间】:2020-12-18 15:45:06
【问题描述】:
我添加了放置在我的 onMapReady() 中的相机位置和动画回调。
CameraPosition cameraPosition =
new CameraPosition.Builder()
.target(new LatLng(currentRoute.locations.get(1).getLatitude(),
currentRoute.locations.get(1).getLongitude()))
.tilt(60)
.bearing((float)currentRoute.getRouteEdges().getFirst().getHeading(currentRoute.getStart(), currentRoute.getFinish())-40)
.zoom(20)
.build();
CameraUpdate update = (CameraUpdateFactory.newCameraPosition(cameraPosition));
turnByTurnMap.animateCamera(update, new GoogleMap.CancelableCallback() {
@Override
public void onFinish() {
if(currentPosition<currentRoute.locations.size()-1){
float bearing = HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition).getLatitude(),
currentRoute.locations.get(currentPosition).getLongitude()).bearingTo(HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
currentRoute.locations.get(currentPosition+1).getLongitude()));
CameraPosition cameraPosition =
new CameraPosition.Builder()
.target(new LatLng(currentRoute.locations.get(currentPosition).getLatitude(),
currentRoute.locations.get(currentPosition).getLongitude()))
.tilt(60)
.bearing(bearing)
.zoom(20)
.build();
currentPosition++;
}
}
@Override
public void onCancel() {
}
});
为什么相机不沿着位置移动。位置数组中有 8 个位置。为什么相机不更新?
编辑: 我已将 animateCamera 添加到回调中,但是从未调用过回调
CameraPosition cameraPosition =
new CameraPosition.Builder()
.target(new LatLng(currentRoute.locations.get(1).getLatitude(),
currentRoute.locations.get(1).getLongitude()))
.tilt(60)
.bearing((float)currentRoute.getRouteEdges().getFirst().getHeading(currentRoute.getStart(), currentRoute.getFinish())-40)
.zoom(20)
.build();
CameraUpdate update = (CameraUpdateFactory.newCameraPosition(cameraPosition));
turnByTurnMap.animateCamera(update,
3000,
routeAnimationCancelableCallback);
routeAnimationCancelableCallback = new GoogleMap.CancelableCallback() {
@Override
public void onCancel() {
}
@Override
public void onFinish() {
Log.d(TAG, "onFinish: here");
if(currentPosition<currentRoute.locations.size()-1){
float bearing = HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
currentRoute.locations.get(currentPosition+1).getLongitude()).bearingTo(HelperMethods.latLongToLocationDouble(currentRoute.locations.get(currentPosition+1).getLatitude(),
currentRoute.locations.get(currentPosition+2).getLongitude()));
CameraPosition cameraPosition =
new CameraPosition.Builder()
.target(new LatLng(currentRoute.locations.get(currentPosition+1).getLatitude(),
currentRoute.locations.get(currentPosition+1).getLongitude()))
.tilt(60)
.bearing(bearing)
.zoom(10)
.build();
CameraUpdate update = (CameraUpdateFactory.newCameraPosition(cameraPosition));
turnByTurnMap.animateCamera(update,
3000,
routeAnimationCancelableCallback);
currentPosition++;
}
}
};
【问题讨论】:
-
在你的
onFinish中你构建了cameraPosition但实际上并没有用它做任何事情。 -
谢谢@Andy,我已经按照正确的建议添加了动画相机调用。但是仍然没有调用回调我已经添加了修改后的代码,我希望有人能提供帮助。我已多次阅读文档,但不明白我缺少什么?谢谢。
-
另一个问题:当您最初调用
animateCamera时,您会立即设置routeAnimationCancelableCallback- 这意味着最初的animateCamera对您的回调一无所知。只需将初始的animateCamera移动到设置routeAnimationCancelableCallback后即可。 -
@Andy 谢谢你解决了这个问题,这就是答案。动画现在流动,第一个动画调用必须在回调创建后进行。如果您想将其发布为答案,我可以标记它。如果没有,我以后会自己做。谢谢安迪。
标签: java android google-maps