如何使用 Google Maps SDK 中的自定义 LocationSource 平滑地为当前位置设置动画?
Posted
技术标签:
【中文标题】如何使用 Google Maps SDK 中的自定义 LocationSource 平滑地为当前位置设置动画?【英文标题】:How to smoothly animate current position with a custom LocationSource in Google Maps SDK? 【发布时间】:2021-08-08 05:21:41 【问题描述】:我正在使用自定义 LocationSource
,它每 300 多毫秒提供一次更新。
您可以在下面观察到坐标更新使蓝点(当前位置)以相当不稳定的方式移动(我移动得很慢以使效果更明显):
如何使蓝点的移动更顺畅,类似于 Google 地图应用程序中的移动?更少的左右晃动和更顺畅的向前移动,而不是从 A 点“跳跃”到 B 点会很棒。
有一些答案建议为相机设置动画或使用插值器在预设时间范围内为 2 个已知位置之间的移动设置动画,但这并不真正适用于我的情况。
【问题讨论】:
只需添加一些animations。 @AndriiOmelchenko 你能说一下你更准确地推荐什么样的动画吗? 您认为在使用自定义LocationSource
的同时可以为“MyLocation”蓝点设置动画吗?或者我真的需要展示我自己的位置标记?
“展示我自己的” - 是的。您应该在缓冲区中存储一些位置点(并且可能是平滑路径)并使用自定义“MyLocation”标记和动画。
我正在试用ValueAnimator
【参考方案1】:
Use SnapToRoad Api to get correct co-ordinates from one location to other location.
public void animateMarker(int startPositionId, final LatLng toPosition, Marker marker, final boolean hideMarke)
final long start = SystemClock.uptimeMillis();
Projection proj = routeMap.getProjection();
Point startPoint = proj.toScreenLocation(marker.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final long duration = 1000;
final Interpolator interpolator = new LinearInterpolator();
runnable = new Runnable()
@Override
public void run()
long elapsed = SystemClock.uptimeMillis() - start;
float t = interpolator.getInterpolation((float) elapsed
/ duration);
Log.d("run:t", String.valueOf(t));
double lng = t * toPosition.longitude + (1 - t)
* startLatLng.longitude;
double lat = t * toPosition.latitude + (1 - t)
* startLatLng.latitude;
Log.d("run:lat", String.valueOf(lat));
Log.d("run:lng", String.valueOf(lng));
marker.setPosition(new LatLng(lat, lng));
if (t < 1.0)
// Post again 16ms later.
handlerSetPosition.postDelayed(this, 8);
else
if (hideMarke)
marker.setVisible(false);
else
marker.setVisible(true);
pointId = startPositionId + 1;
getSnappedRout(pointId);
;
handlerSetPosition.post(runnable);
【讨论】:
也许提一下这个细节会很有用:我的应用程序使用蓝牙信标进行室内定位,所以不幸的是我在使用 Maps API 时受到了很大的限制......以上是关于如何使用 Google Maps SDK 中的自定义 LocationSource 平滑地为当前位置设置动画?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 中为 ios 的 google maps sdk 中的地图视图添加标记
如何重新定位或移动 Google Maps SDK 上的当前位置按钮?
在 Google Maps Android SDK (v2) 中更改建筑物颜色