在FrameLayout中,我有一个视图,由于MotionEvent(getRawX()
和getRawY()
),我获得了绝对坐标。然而,当我将相同的坐标应用于同一个对象(使用LayoutParams)时,对象显示为移动(两个X都增加了一点,因为边上的填充非常小,Y因为有很多而增加了很多包含对象上方的空间。)
我已尝试应用参数,然后从视图中减去getTop(),但它仍然显示已移动。我也试过减去动作栏的高度,但它仍然只有几个像素。
有没有办法在包含View的精度中应用那些RawX和RawY?
答案 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);