我在MapView
上遇到异常行为,我使用的是RoboGuice,因为我不确定它是否会影响这个问题。
问题是,如果我在地图上启用了MyLocationListener
,那么它上面的每个叠加层都会不断重新绘制。
看一下这个例子:
MyMapActivity
@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;
}
}
TestOverlay
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的项目中复制它,问题仍然存在 我想从现在开始我将没有那个指南针
答案 0 :(得分:1)
为什么会发生
因为您希望指南针始终指向北方(或其他方向)而与设备旋转无关,因此需要连续读取磁传感器并连续读取指南针。
使用MapView
强制重叠重绘,您必须使用invalidate()
mathod请求重绘地图中的每个叠加层,包括未更改的ovarlay。
如何解决
我从未使用过RoboGuice
所以我只能就标准解决方案提出建议。
你不能真正停止重绘,如果你想要指南针指向正确的方向,你也不能只绘制一个叠加(因为你正在绘制一个位图,需要清除并拥有每个叠加重绘在上面。)
就我而言,我使用了两个调整来改善这一点:
问候。