2010-07-13 2 views
4

У меня есть приложение, которое использует код mapview-overlay-manager для рисования маркеров карты на MapView с помощью LazyLoadManager из веб-api. Когда я перетаскиваю карту, маркеры загружаются/выгружаются, как ожидалось.Всплывающие воздушные шары исчезают случайно после нажатия OverlayItem на MapView

На кране маркера я надуваю balloon.xml и используйте его, чтобы показать воздушный шар над маркером. Вот где проблема. Он работает, но затем внезапно (который я не могу повторить последовательно) наложение воздушного шара перестанет отображаться на экране.

Его странное, хотя маркер все еще показывает, что его прослушивали, но затем баллон перестает появляться. Я проверил, что воздушный шар не является нулевым (а это не так) и что itemInfo не является нулевым. Его просто не добавили в MapView после вызова .addView (...), но все параметры действительны.

Сторона примечания: В любое время это происходит, все накладки становятся настоящими темными, а наложенные тени переходят от полупрозрачного к черному. Я не знаю, что вызывает это, но это происходит одновременно, что заставляет меня поверить в проблему рисования.

Код для вышеуказанной проблемы ниже. Любые советы/идеи/и т.д. будут оценены.

@Override 
     public boolean onSingleTap(MotionEvent e, ManagedOverlay overlay, GeoPoint point, ManagedOverlayItem item) { 

      if(mBalloon != null) 
      { 
       mMapView.removeView(mBalloon); 
       mBalloon = null; 
      } 

      if(item != null) { 
       //Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show(); 
       MapView.LayoutParams balloonLayoutParams = new MapView.LayoutParams(350, MapView.LayoutParams.WRAP_CONTENT, item.getItemInfo().getMarkerPoint(mMapView.getProjection()), MapView.LayoutParams.BOTTOM_CENTER); 


       if(mBalloon == null) { 
        if(mLayoutInflater == null) { 
         mLayoutInflater = getLayoutInflater(); 
        } 
        ViewGroup parent = (ViewGroup)mMapView.getParent(); 
        mBalloon = (BalloonLayout) mLayoutInflater.inflate(R.layout.balloon_layout, parent, false); 


       } 

       TextView title = (TextView)mBalloon.findViewById(R.id.title); 
       title.setText(item.getItemInfo().getTitle()); 

       TextView subTitle = (TextView)mBalloon.findViewById(R.id.subTitle); 
       subTitle.setText(item.getItemInfo().getBalloonSubTitle()); 

       if(DEBUG) Log.d(TAG, "Setting on click listener."); 
       ((ImageButton)mBalloon.findViewById(R.id.go_button)).setOnClickListener(new ViewItemInfoListener(item.getItemInfo())); 

       mMapView.addView(mBalloon, balloonLayoutParams); 
      } 
      return false; 

     } 
    }); 

    // Fires off the background event to get the 
    overlayManager.populate(); 
} 

ответ

0

Хорошо, я нашел проблему. Существует метод parent, вызывающий этот метод. К сожалению, этот метод вызывался дважды. Однажды на onFocusChanged() и один раз в onCreate(). Удаление одного из них вылечило проблему. Из-за этого значки и воздушные шары были двойными.

0

Рассматривали ли вы во время OnDrag: удаление всех маркеров и сохранить во временный список, запустить таймер (ВЕР 200-500 мс), а затем, после того, как таймер истек заселить маркеры. Если другой таймер запускается до истечения таймера, перезапустите таймер.

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