我正在尝试获取视图左上角的绝对屏幕像素坐标。但是,我可以找到的所有方法,例如getLeft()
和getRight()
都不起作用,因为它们似乎都与视图的父项有关,因此给了我0
。正确的方法是什么?
如果有帮助,则用于“按顺序放回图片”游戏。我希望用户能够绘制一个框来选择多个片段。我的假设是,做到这一点的最简单方法是getRawX()
,并getRawY()
从MotionEvent
再与之比较的布局保持件的左上角的值。知道了碎片的大小之后,我可以确定选择了多少碎片。我意识到我可以在上使用getX()
和,但是那样会返回一个相对位置,这使得确定选择哪些作品更加困难。(我知道这不是没有可能,但似乎不必要地复杂)。getY()
MotionEvent
编辑:根据问题之一,这是我用来尝试获取保存容器大小的代码。TableLayout
是容纳所有拼图的桌子。
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
编辑2:这是我尝试过的代码,遵循更多建议的答案。
public int[] tableLayoutCorners = new int[2];
(...)
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
+ ", " + corners.bottom);
cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " + tableLayoutCorners[0] + ", " + tableLayoutCorners[1]);
完成所有初始化后,便添加了此代码。图像已分为ImageViews数组(cells []数组),该数组包含在中TableLayout
。Cells [0]位于左上角ImageView
,我选择了cells [4],因为它位于中间的某个位置,并且绝对不应该具有(0,0)的坐标。
上面显示的代码仍然为我提供了日志中的全0,我真的不明白,因为正确显示了各个拼图。(我尝试使用public int来获取tableLayoutCorners和默认可见性,两者的结果相同。)
我不知道这是否有意义,但ImageView
最初并未指定s的大小。ImageView
s 的大小是在初始化期间由View自动给我显示图像时确定的。即使该日志记录代码是在给了它们图像并自动调整大小之后,这是否也会使它们的值为0?为了解决这个问题,我添加了tableLayout.requestLayout()
上面所示的代码,但这没有帮助。