android - 谷歌地图 : moving marker and map together smoothly along with the user?

标签 android google-maps google-maps-android-api-2

一旦用户打开该功能并终止它,我必须在谷歌地图中显示实时/实时用户移动位置。

我已经使用下面的方法为标记设置动画。

 private void animateMarker(final Marker marker, final LatLng toPosition,
                              final boolean hideMarker) {
        final Handler handler = new Handler();
        final long start = SystemClock.uptimeMillis();
        Projection proj = mMap.getProjection();
        Point startPoint = proj.toScreenLocation(marker.getPosition());
        final LatLng startLatLng = proj.fromScreenLocation(startPoint);
        final long duration = 1000;

        final Interpolator interpolator = new LinearInterpolator();
        handler.post(new Runnable() {
            @Override
            public void run() {
                long elapsed = SystemClock.uptimeMillis() - start;
                float t = interpolator.getInterpolation((float) elapsed
                        / duration);
                double lng = t * toPosition.longitude + (1 - t)
                        * startLatLng.longitude;
                double lat = t * toPosition.latitude + (1 - t)
                        * startLatLng.latitude;
                marker.setPosition(new LatLng(lat, lng));

                if (t < 1.0) {
                    // Post again 16ms later.
                    handler.postDelayed(this, 16);
                } else {
                    if (hideMarker) {
                        marker.setVisible(false);
                    } else {
                        marker.setVisible(true);
                    }
                }
            }
        });
    }

并且使用以下代码也可以移动 map 。

 // Showing the current location in Google Map
 mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
 // Zoom in the Google Map
 mMap.animateCamera(CameraUpdateFactory.zoomTo(15));

到目前为止,我所做的还不足以将标记和 map 一起移动。它看起来并不那么完美。我必须将 map 和标记一起移动。

Source Code

谢谢。

最佳答案

  • 我在我的类似项目中所做的是这样的:假设我有一个用户逐个导航的点列表,所以我想在 map 上用动画显示该行程。您可以在两点之间移动标记,然后将相机移动到第二个点,而不是同时移动标记和相机,现在再次将标记移动到下一个点,然后当标记伸出下一个点时,为您的相机设置动画。

要使其正常工作,您必须稍微修改一下代码。 添加此代码:

    private static final int ANIMATE_SPEEED_TURN = 1000;
    private static final int BEARING_OFFSET = 20;    

    if (t < 1) {
            mHandler.postDelayed(this, 16);
        } else {

         // your code
         if (hideMarker) {
                    marker.setVisible(false);
                } else {
                    marker.setVisible(true);
                }


         //my added code
                LatLng begin = getBeginLatLng();// current point
                LatLng end = getEndLatLng();// next point

                float bearingL = bearingBetweenLatLngs(begin, end);  

                CameraPosition cameraPosition =
                        new CameraPosition.Builder()
                                .target(end)
                                .bearing(bearingL + BEARING_OFFSET)
                                .tilt(tilt)
                                .zoom(googleMap.getCameraPosition().zoom)
                                .build();

                googleMap.animateCamera(
                        CameraUpdateFactory.newCameraPosition(cameraPosition),
                        ANIMATE_SPEEED_TURN,
                        null
                );

                mHandler.postDelayed(animator, 16);

            }

如果有任何问题请告诉我!!! 有关详细步骤,请访问 Animating the map

关于android - 谷歌地图 : moving marker and map together smoothly along with the user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33499992/

相关文章:

Android - 显示 .swf 动画(按原样或转换为..?)

java - 如何将 tradefed FileUtil 依赖项添加到 Android 应用程序中?

google-maps - Java - Google map 将地址转换为坐标

java - 我如何从 LatLng 获得邻居

Android map GPS 异常值

Android Work Manager - Work Manager 会 100% 确保后台执行完成吗?

android - 通过安卓应用分享谷歌地图静态图片

objective-c - 谷歌地图 : Error when typing in coordinates of certain countries

android - 如何以有效的方式从点集合创建三角形?

Android ProGuard : Most Aggressive Optimizations