【发布时间】:2015-05-30 19:25:20
【问题描述】:
在我的应用程序中需要显示从一个点到另一个点的平滑“移动”谷歌地图标记。 我对动画使用以下方法:
public 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 = 500;
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);
}
}
}
});
}
但是由于简单地为新位置创建了一个新标记(虽然旧的没有被删除):
【问题讨论】:
-
我认为你需要告诉视图在你改变一个位置之后重绘自己,在你开始等待之前。
-
您的意思是删除标记并添加具有新位置的新标记吗?
-
据我了解,为了节省资源,Android 在循环完成之前不会绘制屏幕......所以您需要告诉系统您要重绘屏幕。似乎这样会有所帮助:developer.android.com/reference/android/view/…
-
我尝试复制但失败了.. 我的工作正常:youtu.be/s_gZR1WHqPw
-
可以发个代码吗?
标签: java android google-maps gps google-maps-markers