我正在尝试获取视图左上角的绝对屏幕像素坐标.但是,我可以找到的所有方法,例如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());
Run Code Online (Sandbox Code Playgroud)
编辑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 " …
Run Code Online (Sandbox Code Playgroud) 我使用StickyGridHeaders库来创建像snapfish一样的Gridview .这是我的预期布局:
触摸标题视图(红色箭头)上的按钮而不是复选框时,我会显示一个弹出窗口.问题是我的弹出窗口总是显示错误的位置.从调试窗口,我可以看到它与粘性标题具有相同的位置,但我通过使用关闭了gridview的粘性标题StickyGridHeadersGridView.setAreHeadersSticky(false);
这是我的适配器头:
public View getHeaderView(final int position, View convertView, ViewGroup parent) {
final HeaderViewHolder viewHolder;
if(convertView == null){
convertView = inflater.inflate(R.layout.item_header_gallery, null);
viewHolder = new HeaderViewHolder();
viewHolder.tvImagePrice = (TextView) convertView.findViewById(R.id.tvImagePrice);
viewHolder.btnTouch = (Button) convertView.findViewById(R.id.btnTouch);
convertView.setTag(viewHolder);
}else{
viewHolder = (HeaderViewHolder) convertView.getTag();
}
ImageGroup item = headers.get(position);
viewHolder.tvImagePrice.setText(item.getPriceString());
viewHolder.btnTouch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int[] location = new int[2];
viewHolder.btnTouch.getLocationOnScreen(location);
// location always is [905,59] for every header …
Run Code Online (Sandbox Code Playgroud)