感谢回复。我已经放弃了让它按照我想的方式工作的想法。当然,我认为事情应该是怎样发生的并不是它们实际发生的方式。 :)
以下是基本的工作原理,但在某些情况下似乎会有一个像素的偏差,并且当物体着陆在我尚未解决的某些边界条件上时,圆圈似乎会缺少一些部分。 我个人认为这在应用程序代码中是不可接受的,应该放入Android库中...如果你在Google工作的话,请注意了。 :)
private class LinearMapCanvas
{
private final Canvas canvas_;
private double scale_;
private int translateX_;
private int translateY_;
private double mapX(final double x)
{
final double result = translateX_ + scale_*x;
return result;
}
private double mapY(final double y)
{
final double result = translateY_ - scale_*y;
return result;
}
public LinearMapCanvas(final Canvas canvas)
{
canvas_ = canvas;
final double minX = extentArray_[0];
final double minY = extentArray_[1];
final double maxX = extentArray_[2];
final double maxY = extentArray_[3];
final double dx = maxX - minX;
final double dy = maxY - minY;
final int width = width_ - strokeWidth_ - 2*margin_;
final int height = height_ - strokeWidth_ - 2*margin_;
final double scaleX = width / dx;
final double scaleY = height / dy;
scale_ = Math.min(scaleX , scaleY);
translateX_ = (int)((width_ - (int)(scale_*dx))/2.0 - scale_*minX);
translateY_ = (int)((height_ - (int)(scale_*dy))/2.0 + scale_*maxY);
}
public void drawCircle(final float cx, final float cy, final float radius, final Paint paint)
{
canvas_.drawCircle((float)mapX(cx), (float)mapY(cy), (float)(scale_*radius), paint);
}
public void drawLine(final float startX, final float startY, final float stopX, final float stopY, final Paint paint)
{
canvas_.drawLine((float)mapX(startX), (float)mapY(startY), (float)mapX(stopX), (float)mapY(stopY), paint);
}
...
}