【问题标题】:ProgressBar is getting invisible before load map completelyProgressBar 在完全加载地图之前变得不可见
【发布时间】:2016-03-17 15:09:37
【问题描述】:

我正在从 json 加载我的标记(聚类)并且它正在工作。 但是标记的渲染速度并不快。我的解决方案是在标记加载时显示进度条。 但问题是进度条在渲染之前就消失了。

我正在使用 AsyncTask 进行渲染,并在 onProgressUpdate 中添加标记。

    public class GetMarkersAsync extends AsyncTask<String, HistoricoTO, List<HistoricoTO>> {

        private final static String OBTER = "http://10.0.0.65/Service.asmx/getEnvios";
        GoogleMap map;
        private Activity activity;
        private ProgressBar progressBar;

        public GetMarkersAsync (GoogleMap map, Activity activity) {
            this.map = map;
            this.activity = activity;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
   progressBar = (ProgressBar) activity.findViewById(R.id.progressBar1);
            progressBar.setIndeterminate(true);
            progressBar.setVisibility(View.VISIBLE);

        }

        @Override
        protected List<HistoricoTO> doInBackground(String... params) {

            WebService ws = new WebService();

            String response = ws.makeRequest(OBTER);

            List<HistoricoTO> listaHistoricos = new ArrayList<HistoricoTO>();

            try {
                JSONArray array = new JSONArray(response);
                HistoricoTO historico;
                JSONObject jsonObject;

                for (int i = 0; i < array.length(); i++) {

                    jsonObject = array.getJSONObject(i);

                    historico = new HistoricoTO();
                    historico.setName(jsonObject.getString("name"));
                    historico.setLatitude(jsonObject.getDouble("latitude"));
                    historico.setLongitude(jsonObject.getDouble("longitude"));

                    listaHistoricos.add(historico);

                    publishProgress(historico);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }

            return listaHistoricos;

        }

        @Override
        protected void onProgressUpdate(HistoricoTO... historicos) {
            super.onProgressUpdate(historicos);

            drawMarker(this.map, historicos[0]);

        }

        @Override
        protected void onPostExecute(List<HistoricoTO> historicoTOs) {
            super.onPostExecute(historicoTOs);

        progressBar.setVisibility(View.GONE)

        }

        private void drawMarker(GoogleMap gmap, HistoricoTO historicoTO)
        {

            MyItem offsetItem = new MyItem(historicoTO.getLatitude(), historicoTO.getLongitude(), historicoTO);

           MainActivity.mClusterManager.getMarkerCollection().addMarker(mo);

          MainActivity.mClusterManager.addItem(offsetItem);

           gmap.addMarker(mo);
        }

    }

PS:它正在工作,ProgressBar 正在显示,但问题是标记仅在我“移动”触摸的地图时显示。

【问题讨论】:

  • 尝试在onPostExecute()中绘制标记
  • 我已经考虑过了。但是例如,当我有 5000 个标记时,它不会那么快。为什么 OnProgressUpdate 不是最好的方法?谢谢。

标签: java android google-maps google-maps-android-api-2


【解决方案1】:

每次添加新标记时,地图都会再次失效。 所以它会在地图上绘制你的项目。

map.invalidate()

【讨论】:

  • 我在我的绘图标记方法上调用地图无效。但申请变得缓慢。我正在我的 postexecute 上测试无效。
  • 试试吧!例如每 20 个对象,调用一次 invalidate ! @Teste
猜你喜欢
  • 2012-03-02
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多