【问题标题】:Handle fast add/remove Marker commands / Google Maps v2+ScrollListener处理快速添加/删除标记命令/Google Maps v2+ScrollListener
【发布时间】:2014-02-01 03:06:48
【问题描述】:

我想根据列表(firstVisibleItemlastVisibleItemsPrevious 之间的范围)执行快速添加/删除或隐藏/显示标记。

这是一个从我的数据库中临时分配的列表

private List<MarkerOptions> mMarkers = new ArrayList<MarkerOptions>();
private int firstVisibleItemPrevious = 0;
private int lastVisibleItemsPrevious = 0;

//Loops, network commands, etc
// assign a marker per item
    MarkerOptions markerOptions = new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker))
                .anchor(0.5f, 0.5f)
                .visible(false)
                .position(new LatLng( (Double) coords.get(1) , (Double) coords.get(0)));            

    mMarkers.add(position, markerOptions);

这就是标记的 I/O 的完成方式:

aListView.setOnScrollListener(new OnScrollListener() {
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        int lastVisibleItem = firstVisibleItem+visibleItemCount;

        //if we have the markers from the DB and we notice a move do:
        if( mMarkers.size() > 0 && 
                (firstVisibleItemPrevious != firstVisibleItem ||
                lastVisibleItemsPrevious != lastVisibleItem)
                ){

            LatLngBounds.Builder builder = new LatLngBounds.Builder();
            mMap.clear(); // clear the map to add new markers

            for(int x = firstVisibleItem; x < lastVisibleItem; x++){                    
                Marker mMarker = mMap.addMarker(mMarkers.get(x));
                builder.include(mMarker.getPosition());
            }

            //animate
            CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(builder.build(), 60);
            mMap.animateCamera(cu);

            firstVisibleItemPrevious = firstVisibleItem;
            lastVisibleItemsPrevious = lastVisibleItem;
        }
    }
}

我的方法有三个问题:

  • 首先是我将地图完全擦除(眨眼)。
  • 有些标记并不总是正确分配(我不明白为什么)。
  • 因此,animateCamera 看起来没有正确的 builder 的所有位置

我尝试了一种检查当前可见地图(列表)并检查新列表的方法,然后添加那些不在旧列表中的地图并删除那些不在新列表中的地图。但是它仍然很迟钝,我最终添加了总是标记并且没有正确删除“旧”标记。我也尝试了Marker.setVisibility(),但没有成功。

什么是处理这类快速操作的好方法?请记住,我至少应该有一个 List&lt;MarkerOptions&gt;List&lt;LatLng&gt;List&lt;Marker&gt; 列表作为隐藏/显示操作的来源(动态分配)。

【问题讨论】:

    标签: android android-listview android-maps android-maps-v2 android-scroll


    【解决方案1】:

    错误在

    mMarkers.add(position, markerOptions);
    

    它正在推送列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2012-12-02
      • 1970-01-01
      • 2023-03-26
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多