我在Android上使用内部地图引擎的地图应用程序。我正在使用旋转地图视图,使用传感器服务根据手机的方向旋转地图。一切正常,除了在手机指向北方以外时拖动地图。例如,如果手机朝向西方,拖动地图仍会将地图移动到南方与东方之间,如预期的那样。我假设翻译画布是一种可能的解决方案,但老实说我不确定这样做的正确方法。
以下是我用来旋转画布的代码:
public void dispatchDraw(Canvas canvas)
{
canvas.save(Canvas.MATRIX_SAVE_FLAG);
// mHeading is the orientation from the Sensor
canvas.rotate(-mHeading, origin[X],origin[Y]);
mCanvas.delegate = canvas;
super.dispatchDraw(mCanvas);
canvas.restore();
}
无论手机方向如何,拖动地图的最佳方法是什么? sensormanager有一个“remapcoordinates()”方法,但不清楚这会解决我的问题。
答案 0 :(得分:3)
您可以在两个连续移动事件之间轻松获取delta x和delta y。要更正画布旋转的这些值,可以使用一些简单的三元组:
void correctPointForRotate(PointF delta, float rotation) {
// Get the angle of movement (0=up, 90=right, 180=down, 270=left)
double a = Math.atan2(-delta.x,delta.y);
a = Math.toDegrees(a); // a now ranges -180 to +180
a += 180;
// Adjust angle by amount the map is rotated around the center point
a += rotation;
a = Math.toRadians(a);
// Calculate new corrected panning deltas
double hyp = Math.sqrt(x*x + y*y);
delta.x = (float)(hyp * Math.sin(a));
delta.y = -(float)(hyp * Math.cos(a));
}