我目前正在学习制作一个使用Google Map向用户显示数据的Android应用程序 . 目前我正在使用Polyline绘制我想要在 Map 上显示的所有“数据/线”,但我直接在Google Map上绘制,如mMap.addPolyline(...) . (我希望我可以发布截图,但我没有至少10个声望:-() .
但是我在 Map 上绘制所有这些线条时遇到了一些性能问题,因为它们在那里的一个小区域(通过放大)就像500~900线一样 . 问题是当应用程序正在绘制所有这些数据时,应用程序挂起/停止一秒钟,如冻结,然后一旦完成绘图,应用程序继续工作 .
所以我的问题是,如何在 Map 上绘制时,如何在没有应用程序挂起/停止的情况下顺利绘制那么多折线?例如,当 Map 上绘制折线时,用户可以在 Map 上移动吗?
我试图在不同的线程中在 Map 上绘制Polylines,但是我得到了一个错误,就像必须在主线程上绘制一样(不记得确切的Exception错误) . 除此之外,我还在互联网上搜索这样的例子,但我只找到了Overlay或ItemizedOverlay的例子,但据我所知,这些都被弃用了 . 这样做还有其他选择吗?你能告诉我一些例子或指导我找到合适的资源吗?向我展示一些代码将非常有帮助 .
谢谢
Update: 忘了在这里包含我的代码,这里是我绘制折线的代码:
private class LoadDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// Show a message saying this app is fetching data
Toast.makeText(mMainActivity,
"Fetching data ...",
Toast.LENGTH_SHORT)
.show();
}
@Override
protected Void doInBackground(String... urls) {
// Load then read the data from a url in the background
loadData();
readData();
return null;
}
@Override
protected void onPostExecute(Void unused) {
// draw lines here
PolylineOptions lineOptions = new PolylineOptions()
.add(new LatLng(locations[0].getLatitude(), locations[0].getLongitude()))
.add(new LatLng(locations[1].getLatitude(), locations[1].getLongitude()))
.color(Color.GREEN)
.width(5f);
Polyline polyline = mMap.addPolyline(lineOptions);
lineList.add(polyline);
}
}
3 回答
运行获取数据以在背景线程上绘制并仅在主踏板上绘制线条,使用下面的代码我们绘制3000条线
试试这个::
您应该使用asynclass并显示progressdialog
并将其命名为
ShowPolyLine().execute();