我有一个点数组和一个面板。 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
最多为 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;
}
}
。我也希望这些卡片能够均匀分布......我只是想不出正确的方程式(到目前为止这是一个很遗憾的壮举......)。
谢谢,根据回复(所有2个回复)继承了我的用途:
{{1}}
答案 0 :(得分:1)
不确定我是否理解你的布局,但我认为它是这样的:
|余量|空间|卡|空间|卡|空间|余量|
或
|余量|空间|卡|空间|余量|
因此,空格的数量比卡的数量多一个,总宽度是组件宽度减去边距。 componentWidth = numCards x cardWidth +(numCards + 1)x spaceWidth 现在很容易计算出所需的空间(componentWidth - numCards x cardWidth)/(numCards + 1)所以卡的左侧位置是 leftMargin + spaceWidth x cardNum + cardWidth x(cardNum - 1)
当空间为负时必须小心,然后你必须计算卡必须重叠多少。
答案 1 :(得分: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));
}
所以:
请注意,如果HAND_CARD_WIDTH
大于卡的可用空间,则此解决方案卡仍可能会重叠边距。