我确实有以下for循环
数组部分有一个位置列表“LatLng” 对于循环中的每个部分,我正在调用animateMarker,它会在地图中为标记设置动画,如2秒
我的问题是这个循环过快,我甚至看不到每个部分的动画。它只是显示数组的最后一部分,有时也会冻结应用程序
animatemarker里面有一个带有延迟的hundler
我想在循环中看到每个部分的每个animateMarker 我对线程很不错,所以我确实需要帮助
问题在这里
ArrayList<LatLng> sections = gd.getSection(mDoc);
for (int j = 0; j < sections.size(); j++) {
animateMarker(busMarker, new LatLng(sections.get(j).latitude, sections.get(j).longitude), false);
}
我的animateMarker(没有问题可以解决!)
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 = 2000;
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);
}
}
}
});
}
答案 0 :(得分:0)
我不知道是否有正确的方法,但这是我应该做的方式,
您可以打开一个新线程并在该线程中调用您的forloop。 你还需要使用maps api来制作动画2秒,让runnable对象为单个实例。所以它会更加友好。
for (int j = 0; j < sections.size(); j++) {
synchronized (this) {
runOnUiThread(new Runnable()
{
public void run()
{
animateMarker(busMarker, new LatLng(sections.get(j).latitude, sections.get(j).longitude), false);
}
});
}
sleep(2000);
}