2015-06-22 70 views
2

在FrameLayout中,我有一个视图,我得到了MotionEvent(getRawX()getRawY())的绝对坐标。但是,当我将这些相同的坐标应用于同一个对象(使用LayoutParams)时,对象看起来会移动(两个X都增加了一点,因为边上的填充非常小,Y增加了很多,因为有很多容纳物体上方的空间)。如何将绝对坐标应用于视图内的对象?

我已经尝试应用参数,然后从视图中减去getTop(),但它仍然给出了移动。我也尝试减少操作栏的高度,但它仍然是相当多的像素。

有没有什么办法可以在一个包含View中精确地应用这些RawX和RawY?

+0

你尝试使用View.setY(),View.setX() –

+0

是,做同样的应用通过LayoutParams。 – Lorenz

回答

1

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

所以基本上你需要。减去容器视图上方的空间中,操作栏高度和下面的空间(又名根视图的填充)来弥补的事实,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); 
相关问题