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;
}

这种“fling end”检测比我见过的其他检测要简单一些,但它确实可能会增加 CPU 的负载,因为它在每次绘制时都会运行。

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

如何发送此消息?

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

谢谢你的帮助

彼得

编辑:我正在使用处理程序向 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 回答