将地图缩放到某个位置并将其移动到右侧

时间:2016-11-22 07:04:34

标签: android google-maps zoom move

我想将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())所以我无法收到预期的用户界面。

有人可以知道如何以一种方式存档吗?

1 个答案:

答案 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();