我想将GoogleMap缩放到一个位置,该位置显示为标记,然后将该标记向右滚动, 目前,我将上述两个动作组合在一起:
LatLng point = new LatLng(lat,lon);
MarkerOptions endMarker = new MarkerOptions().position(point);
googleMap.addMarker(endMarker);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(point, 15f));
int screenWidth = getScreenWidth();
int margin = (int) getResources().getDimension(R.dimen.double_standard_margin_padding);
new Handler().postDelayed(() -> googleMap.animateCamera(CameraUpdateFactory.scrollBy(-(screenWidth - margin) * 3 / 8, 0), new GoogleMap.CancelableCallback() {
@Override
public void onFinish() {
}
@Override
public void onCancel() {
}
}), 1000);
如您所见,我添加了两种方法:
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(point, 15f));
googleMap.animateCamera(CameraUpdateFactory.scrollBy(-(screenWidth - margin) * 3 / 8, 0)
我必须推迟移动地图的行动,因为我们不知道地图何时缩放
有时候地图无法移动(onCancel())所以我无法收到预期的用户界面。
有人可以知道如何以一种方式存档吗?
答案 0 :(得分:2)
我多次遇到同样的问题而且我创建了一个CameraUpdateAnimator
来执行CameraUpdates
链并给定延迟(如果需要)并允许相机移动或动画(参见my project on GitHub)。我认为它对你的情况很有用:
CameraUpdateAnimator animator = new CameraUpdateAnimator(mMap, this); // Parameters: a GoogleMap instance and an OnCameraIdleListener to return the control to (can be null)
animator.add(CameraUpdateFactory.newLatLngZoom(point, 15f), false, 0); // Move the camera without delay
animator.add(CameraUpdateFactory.scrollBy(-(screenWidth - margin) * 3 / 8, 0), true, 1000); // Animate the camera with a 1000 milliseconds delay
animator.execute();