フリング後にマップが最終的に移動を停止したときに画面の中央を取得したいと思います。このための標準のSDKイベントがないことに気付きました。MapView.onTouchEventをオーバーライドしたり、ACTION_UPで繰り返しタイマーを開始して、マップの移動が終了するのを待つなど、いくつかのテクニックを見てきました。
MapView.drawをオーバーライドすることを検討しています:-
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
Log.e(TAG, "draw");
center = this.getMapCenter(); //(GeoPoint)
if (centerSave != null){
if (centerSave.equals(center)){
Log.e(TAG, "map stopped moving");
// Now what goes here?????
}
}
centerSave = center;
}
この「フリングエンド」の検出は、私が見た他の検出よりも少し簡単ですが、すべての描画で実行されるため、CPUにもう少し負荷がかかる可能性があります。
マップの移動が停止したことを示すメッセージ/イベントをMapActivityに送信したいと思います。MapActivityは、マップの中心に画鋲を配置します。
このメッセージを送信するにはどうすればよいですか?
スレッド間ではなく、2つの異なるクラス間でメッセージを送信します。おそらく簡単なテクニックがありますが、秘訣はそれを知ることです。
助けてくれてありがとう
ピーター
編集:私はハンドラーを使用してUIスレッドにメッセージを送信しています。残念ながら、それはフリングの問題を解決していません(しかしそれは改善です)。
// Now what goes here????
Message m = Message.obtain();
m.what = MyApplication.HANDLE_DRAW_TO;
MyApplication.tabbedMapActivityHandler.dispatchMessage(m);