2012-03-02 28 views
1

我試圖在相對佈局中居中定製視圖。此圖像旋轉,因此它需要位於佈局的中心,因此它不會超出佈局邊界。現在它顯示在左上角。這裏是我的代碼:使用LayoutParams在一個RelativeLayout中定製一個自定義視圖


container = (RelativeLayout) findViewById(R.id.lay_container); 

bmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.charlie_sheen); 

rotate_view = new RotationView(this, bmap); 

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

params.addRule(RelativeLayout.CENTER_IN_PARENT); 

rotate_view.setLayoutParams(params); 
container.addView(rotate_view); 

這裏是我的親戚XML佈局

<RelativeLayout 
      android:id="@+id/lay_container" 
      android:layout_width="200dip" 
      android:layout_height="200dip" 
      android:layout_alignParentRight="true" 
      android:layout_below="@+id/txt_1" 
      android:layout_marginRight="45dp" 
      android:layout_marginTop="56dp" 
      android:padding="10dip" /> 

你有什麼想法?我知道這個問題可能有一個簡單的解決方案,但我似乎無法找到答案。將LayoutParameter設置爲居中應該將視圖居中放置在右側?

預先感謝任何幫助或建議

回答

2

總體代碼添加自定義視圖看起來是正確的。這可能是一個弱項建議,但要排除視圖定製可能導致的任何問題,您可以嘗試通過以下兩種方式之一修改代碼。

選項1:使用addRule()明確的形式,即

params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); 

選項2:使用的addView()明確的形式,並且不設置視圖本身的參數,可以即

//Omit the line above this one 
container.addView(rotate_view, params); 

除此之外,也許是對自定義視圖的一些洞察,特別是它如何衡量自己(它不是試圖填補父母)?

HTH

+0

他Devunwired,感謝您的幫助。我嘗試了你的建議,而且我仍然遇到同樣的問題。我已經重寫了自定義視圖類中的onMeasure,它比位圖大100px。 (位圖將旋轉,因此它需要一些空間來執行此操作)。我已經在回覆中發佈了代碼。我有一些其他想法: - 我想我可以嘗試添加自定義視圖到我的XML佈局作爲自定義視圖,然後給它充氣 – user1164429 2012-03-04 21:41:44

+0

你可以驗證圖像是否在'RotationView'內部?最簡單的方法是給你的自定義視圖一個背景顏色,這樣你就可以看到它的邊界真正與其父對象的相對位置。我懷疑問題是在'RotationView'內的某個地方。 – Devunwired 2012-03-05 15:56:54

0

好的Devunwired我會這樣做。

這是我現在如何將圖像居中。

1)我使用BitmapDrawable setGravity(Gravity.CENTER)屬性將圖像居中在畫布中。

2)我定心RotationView在我相對佈局:

<RelativeLayout 
    android:id="@+id/image_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/txt_1" 
    android:layout_centerHorizontal="true" > 

    <com.mobicartel.acceldatatester.RotationView 
     android:id="@+id/rotate_view" 
     android:layout_centerInParent="true" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 

</RelativeLayout> 

我將添加背景,讓你知道。 (現在圖像根本不顯示,有時你必須向後退一步,向正確方向走兩步!)

相關問題