2012-01-02 94 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

嘗試使用廣播!

註冊一個BroadcastReceiver不要忘記註銷接收器在你的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); 

註銷(ex exDestroy)

unregisterReceiver(receiver);