我想在地图最终停止移动后获得屏幕中心。我注意到没有标准的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);
答案 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);