Canvas坐标系的单位是多少?-安卓



我发现Canvas的坐标系单位与屏幕的坐标系不同。

例如,在我的情况下如下:

对于一个特定点,其从ImageView.getX()ImageView.getY()获得的屏幕坐标是(336, 578)

然后,通过反复尝试,我在画布上画了一个点,使这个点与ImageView完全位于同一位置我调用了canvas.drawCircle(330, 440, radius, paint);来实现这一点。

问题来了:

为什么两个坐标(336578)和(330440)会不同

是因为屏幕和画布使用不同的单位吗?

这是关于像素、dp等的问题吗?

您可以尝试使用View.getLocationInWindow转换到窗口坐标和从窗口坐标转换,这样您将始终确保使用相同的坐标系。

ImageView.getXY的坐标是相对于父坐标的。画布坐标是相对于视图的。这可能导致的差异

编辑:我假设在一个地方可以得到视图的坐标(使用getXgetY)。将这些转换为窗口坐标。称这些为viewXY[]

当您需要使用它们时,要在画布中绘制,还可以将顶部和左侧坐标转换为窗口坐标。我们称之为canvasXY[]

现在,要绘制的X位置将是viewXY[0] - canvasXY[0],而Y位置将是viewXY[1] - canvasXY[1]

视图的位置坐标始终相对于其父视图。这就像在说,相对于它的父对象,这个视图放在哪里。

还有一件事,屏幕坐标。这说明了这个对象相对于窗口顶部/左侧(想想实际的物理屏幕)的位置。这可以通过View.getLocationOnScreen获得。

如果你想比较两个位置,只有当这两个位置的父视图相同或你使用的是绝对屏幕坐标时,它们才会相等。否则,你只会得到"看起来"不同的结果。

如果你想把两者统一起来,要么把它们放在一个共同的父对象上,要么使用绝对坐标。

相关内容

  • 没有找到相关文章

最新更新