如果飞机标记沿着ArrayList集合中存储的坐标,我需要进行动画移动。我找到了解决方案,如何将标记从一个坐标移动到另一个坐标。以下是该方法的代码,它将其移动:
private void animateMarker(final Marker plane,
final LatLng toPosition,
final boolean hideMarker,
int currentIndex) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = gMap.getProjection();
Point startPoint = proj.toScreenLocation(plane.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final long duration = 2500;
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 lat = t * toPosition.latitude + (1 - t) * startLatLng.latitude;
double lng = t * toPosition.longitude + (1 - t) * startLatLng.longitude;
plane.setPosition(new LatLng(lat, lng));
if (t < 1.0) {
handler.postDelayed(this, 16);
} else {
if (hideMarker) {
plane.setVisible(false);
} else {
plane.setVisible(true);
}
}
}
});
//Call the method which will start another animateMarker()
// after this thread is finished
currentIndex++;
if(currentIndex < theRoute.size()-1){
movePlane(plane, currentIndex);
}
}
当我尝试将对象从一个坐标移动到另一个坐标时,此方法非常有效,但我需要沿着坐标集移动它。正如您所知,在代码的最后我增加了&#34; currentIndex&#34; value,并调用movePlane方法,该方法接受标记的实例和新的索引值。混乱开始了,但让我告诉你代码:
private void movePlane(Marker plane, int index){
if(currentCoordIndex < theRoute.size()){
animateMarker(plane, theRoute.get(index), false, index);
}
}
因此,平面标记从坐标到另一个混乱地来回移动,这是不可接受的。我想,当另一个未完成时,会调用新线程。也许,解决方案很简单,但我真的不知道该怎么做,我期待什么。
另外我需要将标记旋转到下一个点,你可以帮助我吗?