Я добавил позиции камеры и анимацию обратного вызова, которые помещены в мой 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++;
}
}
};
Спасибо @Andy, я добавил анимацию вызова камеры, как было правильно предложено. Однако обратный вызов по-прежнему не вызывается, я добавил исправленный код, надеюсь, кто-то может помочь. Я много раз читал документацию и не понимаю, чего мне не хватает? Спасибо.
Еще одна проблема: когда вы сначала вызываете animateCamera
, вы сразу же устанавливаете routeAnimationCancelableCallback
- это означает, что первоначальный animateCamera
ничего не знает о вашем обратном вызове. Просто переместите начальную animateCamera
после установки routeAnimationCancelableCallback
.
@Энди Спасибо, что решил проблему, это был ответ. Анимация теперь течет, первый вызов анимации должен был произойти после создания обратного вызова. Если вы хотите опубликовать это как ответ, я могу отметить его. Если нет, я сделаю это сам позже. Спасибо, Энди.
Принимая во внимание второй пост кода, просто переместите начальный вызов на animateCamera
после установки routeAnimationCancelableCallback
. Это также включает первоначальное исправление для вызова animateCamera
в обратном вызове.
// initial call to animateCamera was here...
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++;
}
}
};
// and moved to here...
turnByTurnMap.animateCamera(update,
3000,
routeAnimationCancelableCallback);
В своем
onFinish
вы строитеcameraPosition
, но на самом деле ничего с ним не делаете.