2015-06-22 69 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);