2011-12-06 53 views
0

我有一個點陣列和一個面板。 getWidth()基於面板。想象一下你手中的牌,所以HAND_CARD_WIDTH是非常自我解釋。這個循環的目的是在面板上均勻地設置點。但是,它允許卡從面板中出來,這看起來非常糟糕。我想要做的是在面板的兩側留出一個小空白邊緣,無論你手中有多少張牌。均勻劃分一個範圍,考慮到空間和邊距

下面的代碼

 int iteration = 1; 
     int limiter = getWidth(); 
     int slice = (limiter/(handsize+1)); 

     while (points.size() < handsize) { 
      int x = slice*(iteration++); 
      x -= HAND_CARD_WIDTH/2; 
      points.add(new Point(x, y));  
     } 

基本上我想最左邊x至少爲20和最右邊的是在最getWidth() - 20 - HAND_CARD_WIDTH。我也希望卡片能夠均勻分佈......我只是想不出正確的方程式(到這一點很可惜是一個壯舉......)。

感謝,基於繼承人什麼我去響應(其中所有2):

 if((int)points.get(0).getX() < margin){ 
      int boost = Math.abs(margin - (int)points.get(0).getX()); 
      slice = (boost*2)/handsize; 
      for(Point p : points){ 
       p.x += boost; 
       boost -= slice; 
      } 
     } 

回答

1

不知道如果我理解你的佈局,但我認爲這是這樣的:

|保證金|空間|卡|空間|卡|空間|保證金|

|保證金|空間|卡|空間|保證金|

因此,空格的數量比卡片數量多一個,總寬度是組件寬度減去邊距。 componentWidth = numCards x cardWidth +(numCards + 1)x spaceWidth現在很容易計算所需的空間,即(componentWidth - numCards x cardWidth)/(numCards + 1)因此卡的左側位置是leftMargin + spaceWidth x cardNum + cardWidth x(cardNum - 1)

當空格爲負時必須小心,然後您必須計算卡片必須重疊多少。

+0

謝謝。我會試着圍繞你剛纔所說的話把自己的頭圍繞起來。我實際上並不需要計算卡片重疊的方式,因爲它們是從左到右依次排列的,所以只要它們沒有堆積起來,它就已經出來了(謝天謝地) – Jeremy

+0

你也沒錯,我想要卡片正確地居中,基本上我希望卡在中間擠在一起,並儘可能多地留出邊距。 – Jeremy

0

試試這個:

final int MARGIN = 20; 
int availableWidth = getWidth() - 2 * MARGIN - HAND_CARD_WIDTH; 
int cardSpaceWidth = availableWidth/handsize; 
for (int i = 0; i < handsize; i++) { 
    int x = MARGIN + ((i + 0.5) * cardSpaceWidth) - HAND_CARD_WIDTH/2; 
    points.add(new Point(x, y)); 
} 

所以:

  • 計算可用寬度減去整個面板寬度的邊距
  • 計算th每個卡的e空間通過用剩餘空間除以卡的數量
  • 對於每張卡,我們通過佔據卡空間的中間並且減去卡的一半寬度來計算其最左邊的點。

請注意,如果HAND_CARD_WIDTH大於卡的可用空間,則使用此解決方案卡仍然可以重疊邊距。