lat/lng スパンに対して while ループ内でハンドラを実行しているため、特定のスパンの外にいる場合、そのマップは自動的にズームインします。私はこれとまったく同じ設定を使用しており、スパンではなくズーム レベルを比較していますが、問題なく動作します。これが私がやっていることです...
public static void smoothZoomToSpan(final MapController controller,
MapView v, GeoPoint center, int latitudeSpan, int longitudeSpan) {
final Handler handler = new Handler();
final MapView mapView = v;
final int currentLatitudeSpan = v.getLatitudeSpan();
final int currentLongitudeSpan = v.getLongitudeSpan();
final int targetLatitudeSpan = latitudeSpan;
final int targetLongitudeSpan = longitudeSpan;
controller.animateTo(center, new Runnable() {
public void run() {
int curLatSpan = currentLatitudeSpan;
int curLngSpan = currentLongitudeSpan;
int tarLatSpn = targetLatitudeSpan;
int tarLngSpan = targetLongitudeSpan;
long delay = 0;
while ((curLatSpan - 6000 > tarLatSpn)
|| (curLngSpan - 6000 > tarLngSpan)) {
Log.e("ZoomIn", "Thinks we should!");
handler.postDelayed(new Runnable() {
@Override
public void run() {
controller.zoomIn();
Log.e("ZoomIn", "Zoomed");
}
}, delay);
delay += 150; // Change this to whatever is good on the
// device
}
Log.e("ZoomIn", "completed");
}
});
}
このコードを実行すると、Logcat は「Thinks we should!」を出力します。(基本的にログをフラッディング)際限なく。しかし、それは私のハンドラーでは何もしません...実際の zoomIn 呼び出しは起動せず、アプリケーションを強制終了するまで永遠にループします。私は何を間違っていますか?