отправить сообщение из Mapview.draw в активность

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

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

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

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

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

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

Питер

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

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

person Rhubarb65    schedule 02.01.2012    source источник


Ответы (1)


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

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