其他分享
首页 > 其他分享> > android-向地图添加多个标记(v2)

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