【发布时间】:2018-06-19 00:57:13
【问题描述】:
我有一个简单的绘图应用程序,我有一个字母的图片在背面填充一个设置为屏幕高度 45% 的 ImageView。我有一个 JSON 文件,它沿字母存储点。我正在尝试在字母图片的顶部显示这些点。
这些点的坐标范围在 y = -440 和 y = 200 之间。为了正确显示这些点,我需要包含字母的 imageView 的顶部和高度来将这些点映射到屏幕上。我必须在运行时将这些点映射到正确的点,因为不同的屏幕尺寸需要不同的比例才能正确显示这些点。
这就是它的样子(这是带有特定于手机的校正因子):
实际上是这样的:
我通过绘制点的画布渲染绘图。我很确定问题在于我如何获得 ImageView 的顶部。
这是我尝试过的:
//1
float y = view.getTop();
//2
final int[] screenPos = new int[2];
iv.getLocationOnScreen(screenPos);
float y = screenPos[1];
//3
float offset = iv.getTop() - screenPos[1];
float y = iv.getTop() + offset;
有什么我应该做而我没有做的事情吗?有没有更好的方法来获取 getTop() 的相对回报?帮助。
【问题讨论】:
-
view.getTop() 是正确的方法,但它返回相对于直接 parent 的位置。也许您需要检查您的视图是否有另一个父级,这会弄乱点的绘制方式
-
这不是使用 getLocationOnScreen 应该解决的问题吗?
-
是的,是您自己尝试了第 2 步吗?最终 int[] screenPos = new int[2]; iv.getLocationOnScreen(screenPos);浮动 y = screenPos[1]; .......如果你这样做了,我只想建议我能想到的另一种解决方案
-
是的,它没有用。在大多数屏幕上仍然很糟糕,在大屏幕上真的很糟糕。
-
好吧,我会发布一个答案,因为这是我唯一能建议的事情