2012-01-02 13 views
0

飛行後にマップが最終的に移動を停止すると、画面中心を取得します。私はこれのための標準のSDKイベントがないことに気付きます。私はoverride MapView.onTouchEventのようないくつかのテクニックを見たり、ACTION_UPで繰り返しタイマーを開始したり、マップの動きの終了を待ちます。Mapview.drawからアクティビティへメッセージを送信

私は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); 

答えて

0

ブロードキャストを試してみてください!

(元のonCreateに)登録するには

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

を送信するには

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

を作成するには...

をbroadcastreceiverを登録して、あなたのonDestroyで受信機の登録を解除することを忘れてはいけない

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

登録解除する(ex onDestroyで)

unregisterReceiver(receiver); 
関連する問題