android-向地图添加多个标记(v2)
作者:互联网
我有一个从API提取的位置的ArrayList列表,这些位置已添加到从SupportMapFragment生成的GoogleMap中.
我从列表中创建标记,并将其添加到地图,然后将标记ID添加到标记索引的地图,以稍后通过onInfoWindowClick进行引用.
public void addLocationMarkers() {
mGoogleMap.clear();
LocationBlahObject thelocation;
int size = mNearbyLocations.size();
for (int i = 0; i < size; i++) {
thelocation = mNearbyLocations.get(i);
Marker m = mGoogleMap
.addMarker(new MarkerOptions()
.position(
new LatLng(thelocation.Latitude,
thelocation.Longitude))
.title(thelocation.Name)
.snippet(thelocation.Address)
.icon(BitmapDescriptorFactory
.defaultMarker(thelocation.getBGHue())));
mMarkerIndexes.put(m.getId(), i);
}
}
我的问题是,有时位置列表可能在数百个之内,并且在添加标记时,地图会挂起几秒钟.
我已经尝试过使用AsyncTask,但是显然这里的大部分工作都是在操作UI,并且我确实没有发现任何runOnUiThread或publishProgress恶作剧.
有没有更好的方法可以执行此操作,还是可以创建标记并将我不知道的所有标记全部添加?
解决方法:
刚刚从Google碰到了这个这就是我解决添加100个标记的滞后的方法.他们慢慢弹出,但我认为可以.
class DisplayPinLocationsTask extends AsyncTask<Void, Void, Void> {
private List<Address> addresses;
public DisplayPinLocationsTask(List<Address> addresses) {
this.addresses = addresses;
}
@Override
protected Void doInBackground(Void... voids) {
for (final Address address : addresses) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
LatLng latLng = new LatLng(address.latitude, address.longitude);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
mMap.addMarker(markerOptions);
}
});
// Sleep so we let other UI actions happen in between the markers.
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// Don't care
}
}
return null;
}
}
标签:google-maps,google-maps-api-3,google-maps-markers,android 来源: https://codeday.me/bug/20191031/1973212.html