2010-10-05 80 views
3

我有一個FrameLayout,它有2個圖像,一個填充FrameLayout的大圖像和一個我想要移動的很小的圖像。ImageView setMargins不起作用

我嘗試移動小一個這樣的: xml文件

<FrameLayout android:id="@+id/layTrackMap" 
         android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:visibility="gone"> 

     <ImageView android:id="@+id/imgTrackMap" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       /> 

     <ImageView android:id="@+id/imgPosition" 
       android:layout_width="wrap_content" 
       android:src="@drawable/position" 
       android:layout_height="wrap_content" 

       /> 

     </FrameLayout> 

,代碼:

imgPosition = (ImageView)findViewById(R.id.imgPosition); 

    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); 

    //Neither this: 
    //lp.setMargins(30, 20, 0, 0); 

    //Or this 
    lp.leftMargin=30; 
    lp.topMargin=80; 

    imgPosition.setLayoutParams(lp); 

小畫面不動。我希望能夠在佈局中移動小圖像。

後編輯: 在嘗試了幾個建議後,我得出結論,更簡單的做一個自定義視圖並重寫onDraw來完成這項工作。

回答

2

FrameLayout中的所有內容都固定在左上角,即使通過設置頁邊距也無法移動。但是你可以通過使用填充得到同樣的結果...

imgPosition.setPadding(30, 80, 0, 0); 
+0

這在理論上是有效的。但是,如果您想添加背景可繪製(例如,指示您的圖像被選中),這將拉伸它。更好的解決方案是使用邊距定義LayoutParam對象,並將Fede的重力設置爲Fede。或者,如果您想要走這條路線,請進行自定義視圖。 – Dan 2011-05-29 12:24:45

11

您還應該設置重力爲了使用邊距:

lp.gravity = Gravity.LEFT | Gravity.TOP; 
+0

謝謝,它適用於我 – ihrupin 2011-08-17 14:49:06

+0

出於某種原因,只有像這樣的代碼中設置重力解決了我的問題;奇怪的是,在XML佈局中設置重力並沒有。 – Trevor 2012-01-29 14:00:56

+0

謝謝!有用! – Michael 2016-02-15 11:28:39

3
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
        FrameLayout.LayoutParams.WRAP_CONTENT, 
        FrameLayout.LayoutParams.WRAP_CONTENT); 
lp.gravity = Gravity.LEFT | Gravity.TOP; 
lp.setMargins(left, top, right, bottom); 
imgPosition1.setLayoutParams(lp); 

lp = new FrameLayout.LayoutParams(
       FrameLayout.LayoutParams.WRAP_CONTENT, 
       FrameLayout.LayoutParams.WRAP_CONTENT); 
lp.gravity = Gravity.LEFT | Gravity.TOP;  
lp.setMargins(left, top, right, bottom); 
imgPosition2.setLayoutParams(lp); 

我還是設法使用setMargin就像一個常規的setPadding ..不過你必須設置一個新的佈局參數爲每個imageview你想設置一個保證金