2012-01-02 93 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);