Android 当地图旋转时,将标记旋转到设备标题的精确位置。
使用新版本的mapsforge 0.5.1,贴图可以使用onSensorChanged事件进行精细旋转。我在onLocationChanged事件的GPS点添加了一个自定义GPS位置标记。当地图旋转时,标记也会旋转指向设备标题,就像在谷歌地图中使用标记绘制方法中的以下代码一样Android 当地图旋转时,将标记旋转到设备标题的精确位置。,android,openstreetmap,mapsforge,Android,Openstreetmap,Mapsforge,使用新版本的mapsforge 0.5.1,贴图可以使用onSensorChanged事件进行精细旋转。我在onLocationChanged事件的GPS点添加了一个自定义GPS位置标记。当地图旋转时,标记也会旋转指向设备标题,就像在谷歌地图中使用标记绘制方法中的以下代码一样 android.graphics.Canvas androidCanvas = AndroidGraphicFactory.getCanvas(canvas); androidCanvas.save(); Float px
android.graphics.Canvas androidCanvas = AndroidGraphicFactory.getCanvas(canvas);
androidCanvas.save();
Float px = (float) canvas.getWidth()/2;
Float py = (float) canvas.getHeight()/2;
androidCanvas.rotate(degree, px, py);
canvas.drawBitmap(bitmap, left, top);
androidCanvas.restore();
但是,当拖动地图时,标记的位置会与GPS位置的上一点失去方向
如何计算px和py值,使标记保持在地图上GPS位置的精确点上,即使地图正在旋转,标记也指向设备标题。我知道它有点旧,但为了将来的研究,我找到了一个解决方案:
- 首先扩展mapsforge标记并重写其draw()方法
- 从标记复制粘贴绘制方法的内容
- 然后在最后一个条件中添加以下内容:
if(canvasRectangle.intersects(bitmapRectangle)) {
canvas.drawBitmap(bitmap, left, top);
}
if(canvasRectangle.intersects(bitmapRectangle)) {
// Rotate the marker based on bearing for example (or whatever angle you want)
android.graphics.Canvas androidCanvas = AndroidGraphicFactory.getCanvas(canvas);
androidCanvas.save();
float px = (right + left) / 2f;
float py = (bottom + top) / 2f;
androidCanvas.rotate(bearing, px, py);
canvas.drawBitmap(bitmap, left, top);
androidCanvas.restore();
}