如何将绝对坐标应用于视图内的对象?

时间:2015-06-22 09:51:03

标签: android

在FrameLayout中,我有一个视图,由于MotionEvent(getRawX()getRawY()),我获得了绝对坐标。然而,当我将相同的坐标应用于同一个对象(使用LayoutParams)时,对象显示为移动(两个X都增加了一点,因为边上的填充非常小,Y因为有很多而增加了很多包含对象上方的空间。)

我已尝试应用参数,然后从视图中减去getTop(),但它仍然显示已移动。我也试过减去动作栏的高度,但它仍然只有几个像素。

有没有办法在包含View的精度中应用那些RawX和RawY?

1 个答案:

答案 0 :(得分:1)

问题是即使我减去了getTop()和操作栏高度,我也没有减去视图的底部填充。

所以基本上你需要减去容器视图上方的空间操作栏高度和它下面的空间(也就是root)视图的填充)以弥补MotionEvent仅为您提供绝对坐标的事实。

检索动作barheight:

int actionBarHeight;
                    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
                    {
                        actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
                    }

获得协调:

params.topMargin = (int) me.getRawY() - (view.getHeight() / 2) - (draggedMobsArea.getTop() + actionBarHeight) - rootLayout.getPaddingBottom();
                            params.leftMargin = (int) me.getRawX() - (view.getWidth() / 2) - draggedMobsArea.getLeft();
                            view.setLayoutParams(params);