我有一个点数组和一个面板。 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;
}
}
最佳答案
不知道我是否了解您的布局,但我认为它是这样的:
|边距|空间|卡|空间|卡|空间|边距|
要么
|边距|空间|卡|空间|边距|
因此,空格数比卡片数多一,总宽度为组件宽度减去边距。 componentWidth = numCards x cardWidth +(numCards + 1)x spaceWidth现在很容易计算所需的空间,即(componentWidth-numCards x cardWidth)/(numCards + 1),因此卡的左侧位置为margin + spaceWidth x cardNum + cardWidth x(cardNum-1)
当空格为负数时必须小心,然后您必须计算卡必须重叠多少。
关于java - 均匀地划分范围,以留出空间和边距,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8397236/