作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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
,所以我只能就标准解决方案提出建议。
你不能真正停止重绘,如果你想让指南针指向正确的方向,你也不能只绘制一个叠加层(因为你正在绘制位图,需要清除它并有每次叠加重绘)。
在我的例子中,我使用了两个调整来改进它:
问候。
关于android - MyLocationOverlay 导致无限重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570406/
我是一名优秀的程序员,十分优秀!