Обработка onTouchEvent внутри представления, которое также реагирует на onTouchEvent (используется для работы в OSMdroid 3.0.2) - PullRequest
0 голосов
/ 25 июля 2011

В настоящее время я использую osmdroid jar 3.0.1, и у меня есть MapView внутри « Dragable Space » (вид, который вы можете перемещать между экранами). У меня есть панель внизу, которая позволяет пользователю перемещаться между пробелами, и если событие касания происходит за пределами этой области, я звоню mapView.onTouchEvent (событие).

Раньше это хорошо работало в 3.0.1, но я попробовал в osmdroid 3.0.4, и это только кажется, что работает для вертикального движения (что я подозреваю, связано к некоторой настройке касания).

Вот код из моего представления Dragable Space.

@Override
public boolean onTouchEvent(MotionEvent event) {
    // Check if the current space is the Map space and we are over the map
    // difference is the Y value between the top and bottom of the map area.
    if (this.mCurrentScreen == 1
                    && event.getY() >= topY && event.getY() <= difference){
            Log.d(TAG, "touch received inside Map Area");
            // Pass the event directly to the mapView.
            return mOsmv.onTouchEvent(event);
    }
    Log.d(TAG, "touch received outside Map Area");
    return super.onTouchEvent(event);
}

Хотя это противно (нужно передать экземпляр карта), он отлично работал в версиях 3.0.1 и 3.0.2. Тем не менее, так как 3.0.3 больше не работает.

Есть ли лучший способ передавать сенсорные события на карту osmdroid сейчас?

У меня есть демонстрационный проект, иллюстрирующий эту проблему. Полное затмение проект на github .

Вы можете изменить путь сборки, чтобы использовать банку 3.0.1 или 3.0.2, и карта правильно прокручивается внутри большего пространства, но меняется на 3.0.3 или 3.0.4 и любое боковое движение игнорируется.

Любое руководство будет с благодарностью.

PS, это кросс-пост из списка OSMdroid. Я надеюсь, что здесь будет еще несколько читателей.

1 Ответ

0 голосов
/ 29 июля 2011

Проблема заключалась в том, что MapView.onTouchEvent был переименован в MapView.dispatchTouchEvent между версиями 3.0.2 и 3.0.3

...