【发布时间】:2021-09-04 01:07:54
【问题描述】:
我正在开发一个应用程序,类似于优步,滴滴等。我在制作车辆动画时遇到问题(从A点到B点),我在互联网上找到了这段代码,它运行良好好吧:
public void animateMarker(final LatLng startPosition, final LatLng toPosition,final boolean hideMarke) {
final Handler handler = new Handler();
final Marker m = map.addMarker(new MarkerOptions()
.position(startPosition)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.bus2))
.title("Camión"));
final long start = SystemClock.uptimeMillis();
Projection proj = map.getProjection();
Point startPoint = proj.toScreenLocation(m.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final long duration = 5000;
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;
m.setPosition(new LatLng(lat, lng));
if (t < 1.0) {
// Post again 16ms later.
handler.postDelayed(this, 16);
} else {
if (hideMarke) {
m.setVisible(false);
} else {
m.setVisible(true);
}
}
}
});
markers_animations.add(m);
}
我有这个方法负责将列表的位置与折线所需的所有坐标一起传递给它:
private void controlAnimaciones(List<LatLng> ruta) {
for (int i=0; i<ruta.size()-1; i++) {
if (i<ruta.size()) {
animateMarker3(ruta.get(i), ruta.get(i+1), true);
}
}
}
它做了我期望它做的事情,如果它将标记从 A 点移动到 B 点,但是,只是通过迭代列表,我不知道如何解释它,有很多标记只能从列表的一个元素到下一个元素,然后它们停止。我想要做的是实现单个标记可以通过列表的所有点,我一直在尝试以某些方式使用我从互联网上获得的代码,试图理解它,但我没有太多成功。我该怎么做?
【问题讨论】:
标签: java android google-maps marker google-polyline