Android:绘制到画布,如何使左下角对应(0,0)?

7

我正在尝试编写一个图形类,以在Android中使用(我知道已经存在预制的类),但转换所有坐标将是一件麻烦的事情。有没有一种简单的方法使屏幕坐标从左下角开始?


到目前为止,所有的评论都以不同的方式解决了这个问题(很有创意!)。我认为你仍然需要在你的问题中添加更多的上下文,比如为什么以及你希望此时的“left”和“up”是什么。 - Idistic
我同意上面的观点,但是有点模糊,因此作为参考:接受的答案创建了一个坐标系,其原点位于屏幕左下角,其定义域为X = [0,canvas.getWidth()),Y = [0,canvas.getHeight())。 - LeffelMania
4个回答

16

不,我不知道如何将0,0移动到左下角并获得通常认为的“正常”坐标。

但是,结合使用scale()translate()可能会达到同样的效果。

canvas.translate(0,canvas.getHeight());   // reset where 0,0 is located
canvas.scale(1,-1);    // invert

我做完这个之后,什么都没有被绘制出来。 - John Lotacs
1
翻译需要在缩放之前进行。由于您首先进行了缩放,因此翻译会将画布移动到您意图相反的方向。还要记得在变换之前调用canvas.save(),在完成绘制后调用canvas.restore() - LeffelMania
问题是您需要在缩放(scale())之前调用翻译(translate()),现在已经解决。 - John Lotacs
3
这个建议会让你的文字倒过来显示。 - Ludde
1
是的,关于那个倒置的文本。在绘制文本之前调用canvas.scale(1, 1),在完成后调用canvas.scale(1,-1)并不会解决问题。使用canvas.save()和canvas.restore()也无济于事。有人知道如何解决文本倒置的问题吗? - AlanKley
显示剩余3条评论

1
您可以使用类似 canvas.scale(1, -1) 的方法翻转您的画布,然后将其移动到正确的位置。

0

0

Android画布的原点位于左上角。您想将其转换为右下角。要进行此转换,请从画布高度中减去y坐标。

float X1 = xStart;
float Y1 = canvas.getHeight() - yStart;  //canvas is a Canvas object
float X2 = xEnd;
float Y2 = canvas.getHeight() - yEnd;
canvas.drawLine(X1, Y1, X2, Y2, paint ); //paint is a Paint object

这应该使您的行从左下角开始。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接