gpt4 book ai didi

android - MyLocationOverlay 导致无限重绘

转载 作者:行者123 更新时间:2023-11-30 03:54:28 24 4
gpt4 key购买 nike

我在 MapView 上遇到异常行为,顺便说一句,我正在使用 RoboGuice,我不确定它是否会影响问题。

问题是,如果我在我的 map 上启用了 MyLocationListener,那么它上面的每个叠加层都会无限地不断重绘。
看看这个例子:

我的 map Activity

@ContentView(R.layout.map)
public class MyMapActivity extends RoboMapActivity {

@InjectView(R.id.map)
private MapView map;

private List<Overlay> mapOverlays;
private MyLocationOverlay compass;
private TestOverlay testOverlay;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

map.setBuiltInZoomControls(true);
mapOverlays = map.getOverlays();
compass = new MyLocationOverlay(this, map);
testOverlay = new TestOverlay();
}

@Override
protected void onResume() {
super.onResume();
compass.enableCompass();
refreshMap();
}

private void refreshMap() {
mapOverlays.clear();
mapOverlays.add(testOverlay);
}

@Override
protected void onPause() {
compass.disableCompass();
super.onPause();
}

@Override
protected boolean isRouteDisplayed() {
return false;
}
}

测试覆盖

public class TestOverlay extends Overlay {

@Override
public void draw(Canvas arg0, MapView arg1, boolean arg2) {
System.out.println("drawing...");
super.draw(arg0, arg1, arg2);
}
}

如果我运行它,我将永远每秒打印十次 drawing...
但是,如果我通过注释掉这一行来避免启用 MyLocationOverlay 的指南针:

// compass.enableCompass();

然后重绘停止。
知道为什么会这样吗?是错误还是我做错了什么?

编辑

刚在没有使用RoboGuice的项目中复现,问题依旧。
我想我以后不用那个指南针了

最佳答案

为什么会这样

因为您希望罗盘始终指向北方(或其他方向),而不受设备旋转的影响,因此需要连续读取磁传感器和连续读取罗盘。

使用 MapView 强制重绘叠加层,您必须使用 invalidate() 方法来请求重绘 map 中的每个叠加层,包括未重绘的 ovarlays改变。

如何解决

我从未使用过RoboGuice,所以我只能就标准解决方案提出建议。

你不能真正停止重绘,如果你想让指南针指向正确的方向,你也不能只绘制一个叠加层(因为你正在绘制位图,需要清除它并有每次叠加重绘)。

在我的例子中,我使用了两个调整来改进它:

  • 我将传感器更新频率设置为最小频率值。
  • 在更新叠加层之前,我将当前方向与用于绘制指南针的方向进行比较。如果它们相差很小的度数(例如 3 度),我将忽略更新并等待具有更大差异的更新以请求叠加重绘。

问候。

关于android - MyLocationOverlay 导致无限重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570406/

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