Об изменении региона карты в MapView Android Sdk

Я реализую приложение на основе Map Kit в Android. Я был очень плохо знаком с этим SDK. Моя проблема в том, что мне нужно запустить метод, когда область карты изменилась. Ребята, дайте мне знать, возможно ли запустить метод при смене региона?


person Lakshmi    schedule 28.01.2011    source источник
comment
Что вы подразумеваете под изменением региона карты?   -  person Reno    schedule 28.01.2011


Ответы (2)


область карты будет меняться, когда карта выполняет методы панорамирования или масштабирования, но вы не можете получить какую-либо информацию из этих методов, поэтому вы можете сделать это с помощью метода onDraw. Для этого вам нужно создать подкласс MapView и переопределить метод onDraw.

если вы сделаете это, вы можете получить четыре координаты, которые ограничивают отображаемую область, с классом Projection, извлекающим координаты для каждой точки (верхний левый [0,0], верхний правый [ширина-0], нижний левый [0, высота ] и внизу справа [ширина, высота]).

например, в первом onDraw: вы получаете эти четыре координаты, GeoPoint[4] init во втором запуске onDraw вы получаете новые четыре координаты, GeoPoint[4] end, так что здесь вы можете сравнить регионы.

это дорогостоящая операция, поэтому механизм задержки будет полезен для замедления обнаружения изменений...

person Franco    schedule 28.01.2011
comment
Вы можете управлять этим с помощью двух координат - вверху слева и внизу справа (или вверху справа и внизу слева). - person NickT; 28.01.2011

Вы можете использовать событие MapView onCameraChange, как показано ниже:

final Fragment mapFragment = getFragmentManager().findFragmentById(R.id.map); 
mMap =  ((MapFragment)mapFragment).getMap();
mMap.setOnCameraChangeListener(new OnCameraChangeListener() {

    @Override
    public void onCameraChange(CameraPosition position) {
        Point point = new Point(mapFragment.getView().getWidth() / 2 , mapFragment.getView().getHeight()/2);
        LatLng l = mMap.getProjection().fromScreenLocation(point);
        Log.v("asd","center lat: " + l.latitude + " center long: " + l.longitude + " ");

    }
});
person Faruk Toptas    schedule 25.02.2014