2011-05-17 68 views
9

我的應用程序只是一個帶有縮放和拖動選項的修改ImageViewer。 包含修改後的Imageviewer有一個RelativeLayout(我想用作AbsoluteLayout)。動態使用RelativeLayout並設置邊距px,dp,inch,mm

然後,可以將新元素添加到佈局,以將它們放置在圖像的某些點中。元素的像素位置(x,y)在數據庫中,所以我猜想沒有其他方法可以通過編程方式添加它們,而不是使用XML。

然後每次執行拖動或縮放動作時更新這些元素的位置。

問題是,不知何故圖像的像素與RelativeLayout中的像素不匹配!所以這些項目「或多或少」處於位置但不在適當的位置(距離(0,0)越遠,誤差越大)。

事情我已經試過不已:

  • 嘗試不同的轉換,因爲也許問題與位圖和PCB之間的密度差異:

    Resources r = getResources(); 
    float x = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics()); 
    
  • 嘗試使用佈局中設置邊距的不同方法:

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params.leftMargin = (int) newPosition.x; 
    params.topMargin = (int) newPosition.y; 
    element.setLayoutParams(params); 
    
  • 我也想使用的RelativeLayout的可用選項中的XML,但我真的不能編程方式找到它,但我能找到指定尺寸的路上,我的意思是:

    android:layout_marginLeft ="50px" // or "50mm", or dp, or inches... 
    

回答

4

試試這個:對相對佈局,你可以這樣設置頁邊距:params.setMargins(left, top, right, bottom);

+0

你好羅莎莉,這個方法的問題是,我只想設置左邊距和邊距,而不是四個邊距。 – 2011-05-17 12:22:25

+2

ok ..然後你可以傳遞一些整數值到左邊和頂部,其他的你可以給零。那麼它會解決我想。 – Lavanya 2011-05-17 12:59:55

3

我已經找到了答案,這個問題實際上與密度,所以我做了:

DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    float density = metrics.density; 
    //And then I add a new element like: realX*density, realY*density 

I D不太瞭解它在做什麼,但它的工作原理...其實我不明白的價值metrics.density 任何解釋是值得歡迎的。

20

您可以設置高度,寬度和通過下面的代碼保證金:

//headView 
RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)headView.getLayoutParams(); 
head_params.setMargins(80, 0, 0, 0); //substitute parameters for left, top, right, bottom 
head_params.height = 60; head_params.width = 200; 
headView.setLayoutParams(head_params); 

哪裏headView是您的應用程序的視圖。

享受。 :)

+1

只是爲了添加更多信息(我知道超過一年已過)。繼文檔[link](http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html#setMargins(int,%20int,%20int,%20int))之後,調用'requestLayout()需要考慮利潤率。 – khose 2013-10-23 12:25:00