gpt4 book ai didi

android - map 上有大量标记的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:15 28 4
gpt4 key购买 nike

我正在开发 iPhone 上已有的 Android 应用。

在该应用程序中,有一个 map Activity (我数过)有大约 800 个标记,分为四组,用四种不同颜色的可绘制对象进行标记。每个组都可以打开或关闭。关于我在 List 中的标记的信息。我为每个组创建一个 mapOverlay,然后将该叠加层附加到 map 上。我坚信编码部分我做得很好。但无论如何我都会附上我的代码......

问题是,我的 Nexus One 无法处理带有所有这些标记的 map 。绘制 500 个标记大约需要 15 秒。然后当全部画出来的时候,贴图不是很平滑。缩放和导航有点困难。可以做,但是体验不好,想看看能不能在那里做点什么。我知道如果我避免 String > Double 转换,我可以节省一些时间,但我怀疑这是否有意义。

iPhone 似乎没有显示所有这些标记的问题。显示所有这些大约需要 1-2 秒,缩放和平移也不错。减速是明显的,但仍然可以接受。我个人觉得把那些标记都画上去是不好的,但是app是别人设计的,我不应该做太大的改动。

我不知道该做什么。看来我将不得不想出不同的功能,可能使用 GPS 位置(如果已知),并仅在某个半径内绘制标记,或者,如果位置未知,则使用屏幕中心( map )并在其周围绘制标记。如果我做出这些改变,我必须对我的老板有合理的解释。

如果有人有任何 idas,我将不胜感激。

还有代码:

    List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.pin_blue);
drawable = this.getResources().getDrawable(R.drawable.pin_blue);
ArrList = appState.GetSleepArrList();
ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable, this);
...
...
for (int m = 0; m < ArrList.size(); m++) {
tName = ArrList.get(m).get("name").toString();
tId = ArrList.get(m).get("id").toString();
tLat = ArrList.get(m).get("lat").toString();;
tLng = ArrList.get(m).get("lng").toString();;
try {
lat = Double.parseDouble(tLat);
lng = Double.parseDouble(tLng);
p1 = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
OverlayItem overlayitem = new OverlayItem(p1, tName, tId);
itemizedoverlay.addOverlay(overlayitem);
} catch (NumberFormatException e) {
Log.d(TAG, "NumberFormatException" + e);
}
}
mapOverlays.add(itemizedoverlay);
mapView.postInvalidate();

........................

public class ItemizedOverlay extends ItemizedOverlay<OverlayItem>
{
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
private Context mContext;
public HelloItemizedOverlay(Drawable defaultMarker, Context context)
{
super(boundCenterBottom(defaultMarker));
mContext = context;
}

public void addOverlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i)
{
return mOverlays.get(i);
}
@Override
public int size()
{
return mOverlays.size();
}
@Override
protected boolean onTap(int index)
{
final OverlayItem item = mOverlays.get(index);
... EACH MARKER WILL HAVE ONCLICK EVENT THAT WILL PRODUCE CLICABLE
... BALOON WITH MARKER'S NAME.
return true;
}
}

最佳答案

嗯。结果我每次添加标记后都会调用 populate() 。我从 addOverlay() 方法中取出 populate() 并在循环完成后调用它。现在所有标记几乎立即显示。现在唯一的问题是 map 在较低的缩放比例下 react 非常迟钝(一次显示很多标记)。我看不到解决方案,除非我弄清楚如何在 map 缩小时减少 map 上的标记数量……想以某种方式对它们进行分组……目前正在研究这个……

关于android - map 上有大量标记的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710098/

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