Intereting Posts
Хранить андроид в видимой области, если клавиатура подходит Как изменить отступ или марку значка панели действий или логотипа в теме XML? OnConfigurationChanged не получает вызов в первый раз Android – рассчитать угол дуги Как получить программный список цветов из градиента на Android Уведомление об обновлении для нескольких сообщений Как убедиться, что объявления admob всегда отображаются внизу экрана только с помощью xml? Правый выравнивающий столбец в таблице таблиц Android Заменяя glReadPixels на EGL_KHR_image_base для более быстрой пиксельной копии Какой-нибудь быстрый эмулятор для Android? Это боль, чтобы развиваться с использованием эмулятора по умолчанию Android Как использовать FirebaseJobDispatcher Очистить локальный кеш виртуальных устройств Genymotion Восстановление из Android-приложения будет убито Qemu: не удалось загрузить BIOS BIOS «bios.bin» в Mountain Lion Начало разработки приложений для телефонов

Проблема с производительностью многоугольников Android Google Maps v2?

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

for(PolygonOptions item : items) { getMap().addPolygon(poly); } 

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

Я также хочу нарисовать много многоугольников на карте в фоновом режиме, потому что загрузка и сборка вершин требует времени. Решение, которое сработало для меня, состояло в том, чтобы загрузить данные в AsyncTask, а затем передать точки для каждого многоугольника, поскольку он считывается обратно в метод в основном пользовательском интерфейсе в методе onProgressUpdate.

 private class AddZonesTask extends AsyncTask<Zone, Zone, Integer> { protected Integer doInBackground(Zone... zones) { for (Zone zone : zones) { Cursor cursor = provider.query( .... ); List<Points> points = cursorToPointsMethod(cursor); zone.add(points); publishProgress(zone); } return zones.length; } protected void onProgressUpdate(Zone... zones) { drawBorder(zones[0]); } protected void onPostExecute(Integer result) { } } 

Где drawBorder в главном пользовательском интерфейсе затем добавляет их к объекту карты.

Bobbake4 является правильным. Android требует, чтобы addPolygon находился в основном потоке. У меня тоже есть аналогичная проблема. В настоящее время я реализую asynctask, но, похоже, нет способа выполнить addPolygon из doInBackground мой текущий код ниже:

  private class AddPolygonToMap extends AsyncTask<String, Integer, ArrayList<PolygonOptions>> { @Override protected ArrayList<PolygonOptions> doInBackground(String... urls) { publishProgress(1); return drawPolygonWithPage(urls[0]); } @Override protected void onProgressUpdate(Integer... progress) { int value = progress[0] + progressBar.getProgress(); progressBar.setProgress(value); } @Override protected void onPostExecute(ArrayList<PolygonOptions> result) { for (int i = 0; i < result.size(); i++) { map.addPolygon(result.get(i)); } } } 

В идеале я хотел бы добавить фон AddPolygon … Есть ли другой способ сделать это?