gpt4 book ai didi

android - 向 map 添加多个标记 (v2)

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:12 24 4
gpt4 key购买 nike

我有一个从 API 中提取位置的 ArrayList 列表,这些位置被添加到从 SupportMapFragment 生成的 GoogleMap 中。

我从列表中创建标记并将它们添加到 map 中,然后将标记 ID 添加到标记索引的 map 中,以便稍后通过 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);
}
}

我的问题是,有时位置列表可能有数百个, map 会在添加标记时挂起几秒钟。

我尝试过使用 AsyncTask,但显然这里的大部分工作是操纵 UI,我确实没有发现任何 runOnUiThread 或 publishProgress 恶作剧。

是否有更好的方法来执行此操作,或者是否有一种我不知道的创建标记并批量添加它们的方法?

最佳答案

刚从谷歌上看到这个。这就是我解决添加 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;
}
}

关于android - 向 map 添加多个标记 (v2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com