0

После долгого поиска того, как мигать маркер, я придумал этот код в своем проекте, используя google maps v2. Вот код ..Мигающий маркер в android Google maps v2

MyMarker = map.addMarker(new MarkerOptions().position(current_loc).title(address).snippet(city). 
         icon(BitmapDescriptorFactory.fromResource(R.drawable.bus4))); 

       markertimer = new Timer(); 
       markertimer.scheduleAtFixedRate(new TimerTask() { 

        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           // TODO Auto-generated method stub 
           blinkMarker(); 
          } 
         }); 
        } 
       }, 0, 500); 

здесь метод blinkMarker ..

private boolean blinkMarker(){ 


    if(marker == true){ 
     current.setVisible(true); 
     marker = false; 
     } 
     else if(marker == false){ 
     current.setVisible(false); 
     marker = true; 
     } 
    return marker; 
} 

Так выше работает отлично, и маркер мигает, но мои сомнения

  1. выйдет над кодом используйте больше памяти для мигания?
  2. , и я использую обратное геокодирование для получения адреса, поэтому не могу нажать маркер при мигании. Пожалуйста, предложите другой способ мигать маркером?
+0

, пожалуйста, поделитесь своим обновленным кодом – jyomin

ответ

1

Попробуйте заменить setVisible на setIcon. При этом вам нужно подготовить еще один ярлык для значка с таким же размером, как bus4.png, но со всеми прозрачными пикселями.

Примечание there is a bug связано с setIcon, что приводит к исчезновению информационного окна.

В стороне отметить несколько проблем в коде:

  1. Использование Timer расточительно. Он использует Thread, который вам не нужен. Вместо этого используйте вместо этого Handler.
  2. У вас (вероятно) есть утечка памяти. Timer не прекратит работать, если уничтожен Activity. Вам нужно cancel, если вы этого не сделаете. Если вы перейдете на Handler, повторите попытку, чтобы удалить любые Runnable s или Message s, которые вы отправляете.
+0

спасибо за сообщение об утечке памяти и ошибке, я отменил таймер в onDestroy(). Я не очень разбираюсь в обработчиках, поэтому используйте dont. – Jarvis

0

Обычно карта Google более занята: с множеством маркеров. Таким образом, вы можете использовать Scheduledthreadpoolexecutor с runnable.

Ваш метод blinkMarket может быть короче, например: 'current.setVisible (! Marker)'. Я боюсь, что использование таймера - неправильный подход. Вы можете сделать то же самое с помощью Handler с postDelayed. Если мигание маркера зависит от какого-либо условия, это должно быть проверено повторно, чем мигающая задача не должна генерироваться дважды.

Смежные вопросы