Как заставить маркер появляться или исчезать в зависимости от уровня масштабирования на Google Maps v2

Все мы знаем, что некоторые из предопределенных ориентиров на Картах Google не отображаются при более низком уровне масштабирования, но внезапно появляются при более высоком уровне масштабирования. Я хотел бы знать, могу ли я сделать так, чтобы настраиваемый маркер не отображался при более низких уровнях масштабирования, а отображался при более высоких.

EDIT: вот фрагмент моего кода.

 // Changing marker icon
   marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.gasbig));


   // adding marker
  map.addMarker(marker);

  //position on Center

  CameraPosition cameraPosition = new CameraPosition.Builder().target(
          new LatLng(14.635356, 121.03272914)).zoom(16).build();

  map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

  map.setOnCameraChangeListener(new OnCameraChangeListener() {

        @Override
        public void onCameraChange(CameraPosition arg0) {
            if(arg0.zoom > 7){
                marker.visible(true);

            }


        }
    });

Я попробовал предложение MaciejGórski, но маркер по-прежнему появляется на всех уровнях масштабирования. Извините за вопрос, я все еще новичок в Android.

Заранее спасибо.


person Jeongbebs    schedule 02.10.2013    source источник
comment
Я просто добавил фрагмент своего кода.   -  person Jeongbebs    schedule 03.10.2013


Ответы (2)


Вы можете сделать это для любого Marker: вызовите setVisible в обратном вызове OnCameraChangeListener.onCameraChange с помощью true или false в зависимости от значения CameraPosition.zoom.

Редактировать после редактирования вопроса:

Вам нужно сохранить ссылку на Marker вместо MarkerOptions:

// adding marker
marker = map.addMarker(markerOptions);

и позвоните setVisible на этот marker:

    @Override
    public void onCameraChange(CameraPosition cameraPosition) {
        marker.setVisible(cameraPosition.zoom > 7);
    }

Примечание. Здесь всегда вызывается setVisible, но это может быть неоптимальным при использовании большого количества Marker.

person MaciejGórski    schedule 02.10.2013
comment
почему markerOptions является параметром маркера? Я думал, что markerOptions — это тип переменной. - person Jeongbebs; 03.10.2013
comment
@MiguelRivera MarkerOptions — это тип, markerOptions может быть именем переменной. - person MaciejGórski; 03.10.2013
comment
Ох, ну ладно. мои извинения, сэр. - person Jeongbebs; 03.10.2013
comment
logcat говорит, что у меня есть исключение nullpointer в этой строке marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.gasbig)); У меня есть изображение с именем gasbig - person Jeongbebs; 03.10.2013

Возможно, вы могли бы сделать это, изменив мой ответ на: >Android Maps v2 – анимация камеры для включения большинства маркеров

В противном случае хорошим выбором может быть использование расширений Android Maps. Однако нет опыта работы с вашими конкретными потребностями.

Просто понял, что, возможно, неправильно понял вопрос. Думал, ты имеешь в виду свои маркеры. Тем не менее, взгляните на библиотеку расширений. Вполне может быть, что у них есть что-то полезное.

person cYrixmorten    schedule 02.10.2013
comment
Библиотека расширений не может этого сделать (пока), но может быть хорошей альтернативой, когда вместо того, чтобы скрывать маркеры на более низких уровнях масштабирования, вы хотите, чтобы они были сгруппированы и легко доступны на любом уровне масштабирования. - person MaciejGórski; 02.10.2013
comment
Просто показалось, что он может из: stackoverflow.com/questions/18450081/ - person cYrixmorten; 02.10.2013
comment
Мигель, насколько я понимаю, хочет что-то вроде MarkerManager в javascript API. - person MaciejGórski; 02.10.2013
comment
Привет @ MaciejGórski, у тебя есть учебник или код, который включает MarkerManager для Android? Я не могу найти его. - person Jeongbebs; 03.10.2013
comment
@MiguelRivera Я не знаю, существует ли такой учебник. - person MaciejGórski; 03.10.2013