从Mapview.draw发送消息到活动

时间:2012-01-02 12:55:00

标签: android android-mapview message draw onfling

我想在地图最终停止移动后获得屏幕中心。我注意到没有标准的SDK事件。我已经看到了一些技术,例如override 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;
}

这个“fling end”检测比我见过的其他人稍微简单一点,但它可能会加载CPU,因为它在每次绘制时运行。

我现在想向MapActivity发送某种消息/事件,说地图已停止移动。然后MapActivity将在地图中心放置一个图钉。

如何发送此消息?

它不是在线程之间发送消息,而是在两个不同的类之间发送消息。可能有一个简单的技术,但诀窍是知道它。

感谢您的帮助

彼得

编辑:我正在使用处理程序向UI线程发送消息。不幸的是,它并没有解决这个问题,(但这是一个改进)。

// Now what goes here????
Message m = Message.obtain();
m.what = MyApplication.HANDLE_DRAW_TO;
MyApplication.tabbedMapActivityHandler.dispatchMessage(m);

1 个答案:

答案 0 :(得分: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);

注册(在ex onCreate中)

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

取消注册(在ex onDestroy中)

unregisterReceiver(receiver);