2011-05-06 41 views
0

我對Android非常陌生,並且在解決如何以編程方式在RelativeLayout中佈局視圖時遇到問題。我想要做的是在RelativeLayout容器的中心創建具有特定半徑(比如50px)的4個圓圈(子視圖),所以它看起來像在RelativeLayout的中心有一個虛構的正方形,每個頂點都是爲其中一個圈子的中心。簡單的Android界面 - RelativeLayout中的圈子(兒童視圖)

我能夠在視圖中繪製圓圈;這是很簡單:)

 
class CircleView extends View { 
    ... 
    protected void onDraw(Canvas canvas) { 
     // draw circle on canvas 
    } 
} 

我無法弄清楚是如何佈局的意見。它似乎將他們繪製在彼此之上,即使我爲每個子視圖設置了LayoutParams和一個Id。

 
class Circles extends RelativeLayout { 
    public Circles(Context c) { 
     super(c); 
     addChildViews(); 
    } 

    ... 
    private void addChildViews() { 
     final Context c = getContext(); 
     final CircleView v0 = new CircleView(c); 
     v0.setId(0); 

     final RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     params.addRule(RelativeLayout.LEFT_OF, 1); 
     params.addRule(RelativeLayout.ABOVE, 2); 
     v0.setLayoutParams(params); 
     addView(v0); 
     .... 
     // and so on, with relative layout params for other 3 views 
    } 
} 

有人能讓我走上正確的軌道嗎?我也不知道我是否在繪圖週期中的正確時間調用addChildViews,並且這是導致它們彼此重疊的原因。非常感謝您的幫助。

回答

0

兩件事情

1)視圖的默認操作是通過應用(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)爲您的LayoutParams,您創建與高度和寬度四個視圖,以填補其母公司,所以您的父佈局的大小(可能是屏幕),所以您只能看到一個,因爲其他人會被定位在屏幕外。

爲了解決這個問題,無論是設置要圓要爲您LayoutParms大小,

float dpi = getResources().getDisplayMetrics().density; 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int)(50.0f * dpi), (int)(50.0f * dpi)); 

,或者您可以覆蓋onMeasure(INT X,int y)對方法在你的圈子查看,像這樣

 @Override 
     public void onMeasure(int x, int y) { 
      float dpi = getResources().getDisplayMetrics().density; 
      setMeasuredDimension((int)(50.0f * dpi), (int)(50.0f * dpi)); 
      } 

2)不要將您的視圖ID設置爲0 ...我不記得它是系統保留或什麼,但它不會很好。

另外,如果你想讓所有的圓圈都在你的圓圈中居中,你需要像這樣設置它的重心。

public class Circles extends RelativeLayout { 
     public Circles (Context ctx) { 
      super(ctx); 
      this.setGravity(Gravity.CENTER); 
      addViewChildren(); 
     } 

這將集中所有的圈兒童,給你想要的結果。

+0

優秀的東西;謝謝!按預期工作。並感謝視圖id設置爲零的提示。 – 2011-05-06 15:00:06