【问题标题】:Trouble getting the top and bottom of an imageView无法获取 imageView 的顶部和底部
【发布时间】: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]; .......如果你这样做了,我只想建议我能想到的另一种解决方案
  • 是的,它没有用。在大多数屏幕上仍然很糟糕,在大屏幕上真的很糟糕。
  • 好吧,我会发布一个答案,因为这是我唯一能建议的事情

标签: android size screen


【解决方案1】:

它会给你相对于屏幕的位置

Rect rect = new Rect();

view.getGlobalVisibleRect(rect);

float top = rect.top;

//there is also rect.bottom, rect.width, rect.height etc.

【讨论】:

  • 还是不行。因此画布存储在 View 子类中(位于 0,0 处)。当我计算顶部和底部时,onSizeChanged()。问题是否存在(也许 imageView 没有完全处理?)?
  • 真的很奇怪,因为这段代码最适合我(可能是 ImageView 没有完全处理,所以当所有视图都已绘制取消时,您可以尝试将代码移动到 onStart()排除这种可能性
  • 好吧,我想我已经想通了。我认为它的像素密度问题。我让画布画出矩形并且它匹配。我可以让它适用于密度相同但屏幕密度不同的手机。我不知道如何处理不同的密度......
  • 你在使用 dp 吗?我相信你会,但仍然如此。 dp 是密度像素。它旨在防止您遇到的情况。如果您使用 dp,您实际上不需要使用不同的密度,它会自动调整developer.android.com/training/multiscreen/…
  • 如中,我认为这是映射功能的问题。所以当我有低dp(i?)的手机时,点太高了。高于 420 dp(i) 时,点太低。任何 420 dpi 的手机都恰到好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多