gpt4 book ai didi

java - 像 UBER 一样在 map 上动画/移动多辆汽车(标记)

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:44 25 4
gpt4 key购买 nike

我希望在 map 上像 UBER 一样对多辆汽车(标记)进行动画/移动,同时当 API 响应到来时,每 10 秒通过 API 调用获取它们的更新位置,我想在他的方向上对每辆汽车(标记)进行动画/移动。

现在,我能够顺利地制作动画/移动一辆车(标记)。但当它们有多个时,我会通过保留它们的旧位置来挣扎

int driverArraySize = driverArray.length();
for (int i = 0; i < driverArraySize; i++){
JSONObject driverJson = driverArray.getJSONObject(i);
String driver_id = driverJson.getString("_id");
JSONArray driverLocation = driverJson.getJSONArray("driverLocation");}

我的数组包含驱动程序 ID 及其当前位置,我可以使用这些数据来制作动画/移动吗?

private void animateCars(final Marker marker, final LatLng beganPosition, final LatLng finalPosition, final LatLngInterpolator latLngInterpolator) {
if (marker != null) {
final LatLng startPosition = new LatLng(beganPosition.latitude, beganPosition.longitude);
final LatLng endPosition = new LatLng(finalPosition.latitude, finalPosition.longitude);
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.setDuration(20000); // duration in second
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener(){
@Override
public void onAnimationUpdate(ValueAnimator animation){
try {
float v = (float) animation.getAnimatedValue();
LatLng newPosition = latLngInterpolator.interpolate(v, startPosition, endPosition);
marker.setPosition(newPosition);
marker.setAnchor(0.5f, 0.5f);
Float rotation = getBearing(startPosition, new LatLng(finalPosition.latitude, finalPosition.longitude));
if (!Float.isNaN(rotation)) {
marker.setRotation(rotation);
}
} catch (Exception ex) {
//I don't care atm..
}
}
});
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
});
valueAnimator.start();
}
}

public static float getBearing(LatLng begin, LatLng end) {
double lat = Math.abs(begin.latitude - end.latitude);
double lng = Math.abs(begin.longitude - end.longitude);

if (begin.latitude < end.latitude && begin.longitude < end.longitude)
return (float) (Math.toDegrees(Math.atan(lng / lat)));
else if (begin.latitude >= end.latitude && begin.longitude < end.longitude)
return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 90);
else if (begin.latitude >= end.latitude && begin.longitude >= end.longitude)
return (float) (Math.toDegrees(Math.atan(lng / lat)) + 180);
else if (begin.latitude < end.latitude && begin.longitude >= end.longitude)
return (float) ((90 - Math.toDegrees(Math.atan(lng / lat))) + 270);
return -1;
}

这是我用于动画的代码

最佳答案

关于java - 像 UBER 一样在 map 上动画/移动多辆汽车(标记),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com