0

フリング後にマップが最終的に移動を停止したときに画面の中央を取得したいと思います。このための標準の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);
4

1 に答える 1

0

ブロードキャストを使ってみよう!

ブロードキャストレシーバーを登録し、onDestroy でレシーバーを登録解除することを忘れないでください。

作成するには

 BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {         
            // if intent.getActiong equals "hello"
        }
    };

送信する

 Intent broadcast = new Intent();
        broadcast.setAction("hello");
        sendBroadcast(broadcast);

登録するには (例では onCreate)

IntentFilter filter = new IntentFilter();
        filter.addAction(BroadMess);
        registerReceiver(receiver, filter);

登録を解除するには (例: onDestroy)

unregisterReceiver(receiver);
于 2012-01-19T09:38:36.067 に答える