Android MyLocationOverlay导致无休止的重画

Android MyLocationOverlay导致无休止的重画,android,android-mapview,redraw,mylocationoverlay,Android,Android Mapview,Redraw,Mylocationoverlay,我在我的MapView上遇到了一个异常行为,我正在使用RoboGuice,我不确定它是否会影响问题 问题是,如果我在地图上启用了MyLocationListener,那么地图上的每个覆盖都会不断地无限重绘。 看看这个例子: MyMAP活动 @ContentView(R.layout.map) public class MyMapActivity extends RoboMapActivity { @InjectView(R.id.map) private MapView map; priva

我在我的
MapView
上遇到了一个异常行为,我正在使用RoboGuice,我不确定它是否会影响问题

问题是,如果我在地图上启用了
MyLocationListener
,那么地图上的每个覆盖都会不断地无限重绘。
看看这个例子:

MyMAP活动

@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;
}
}
如果我运行此操作,我将永远以每秒10次的速度打印
绘图…

但是,如果我通过注释这一行来避免启用
MyLocationOverlay
的指南针:

// compass.enableCompass();
然后重绘停止。
你知道为什么会这样吗?是虫子还是我做错了什么

编辑

只是在不使用RoboGuice的项目中复制了它,问题仍然存在。

我想从现在起我就不用那个指南针了。为什么会这样

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

使用
MapView
强制重画覆盖图,必须使用
invalidate()
方法请求重画地图中的每个覆盖图,包括未更改的椭圆形

如何解决它

我从未使用过
RoboGuice
,因此我只能就标准解决方案提供建议

如果你想让指南针指向正确的方向,你不能真正停止重画,你也不能只画一个覆盖图(因为你要画的是位图,需要清除它并在上面重画每个覆盖图)

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

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

问候。

为什么会这样

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

使用
MapView
强制重画覆盖图,必须使用
invalidate()
方法请求重画地图中的每个覆盖图,包括未更改的椭圆形

如何解决它

我从未使用过
RoboGuice
,因此我只能就标准解决方案提供建议

如果你想让指南针指向正确的方向,你不能真正停止重画,你也不能只画一个覆盖图(因为你要画的是位图,需要清除它并在上面重画每个覆盖图)

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

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

问候。

你的知识再次非常有用。我马上就要删除指南针了,反正我也不需要。你对StAccess是新手,但是当你认为它是正确的/完整的时候,你会接受一个答案。这会通知其他用户您已经得到了所需的答案,而他们不需要花时间在这些问题上。你也可以在你和其他人的帖子中对答案和问题进行投票,以表明你觉得它们有用,从而帮助其他人快速找到有用的问题/答案。这是你对社区贡献的一部分:-)你的知识再次非常有用。我马上就要删除指南针了,反正我也不需要。你对StAccess是新手,但是当你认为它是正确的/完整的时候,你会接受一个答案。这会通知其他用户您已经得到了所需的答案,而他们不需要花时间在这些问题上。你也可以在你和其他人的帖子中对答案和问题进行投票,以表明你觉得它们有用,从而帮助其他人快速找到有用的问题/答案。这是您对社区贡献的一部分:-)
// compass.enableCompass();