отправить сообщение от Mapview.draw в активность - PullRequest
0 голосов
/ 02 января 2012

Я хочу получить центр экрана, когда карта, наконец, перестает двигаться после броска.Я заметил, что для этого нет стандартного события 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;
}

Это обнаружение "броска" немного проще, чем другие, которые я видел, но, возможно, он загружает ЦП немного больше, поскольку он работает при каждом розыгрыше.

I сейчасхочу отправить какое-то сообщение / событие в мой MapActivity, сообщающее, что карта перестала двигаться.Затем MapActivity поместит метку в центр карты.

Как отправить это сообщение?

Это сообщение не между потоками, а между двумя различными классами.Существует, вероятно, простая техника, но хитрость заключается в том, чтобы узнать ее.

Спасибо за любую помощь

Питер

РЕДАКТИРОВАТЬ: я использую обработчик для отправки сообщения наПользовательский интерфейсК сожалению, это не решает проблему сброса (но это улучшение).

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

1 Ответ

0 голосов
/ 19 января 2012

Попробуйте использовать трансляции!

Зарегистрируйте приемник и не забудьте отменить регистрацию приемника в вашем 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);
...