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;
            }
        }
4

2 回答 2

1

不确定我是否理解您的布局,但我认为它是这样的:

|边距|空格|卡片|空格|卡片|空格|边距|

或者

|边距|空格|卡片|空格|边距|

因此,空格数比卡片数多一,总宽度是组件宽度减去边距。componentWidth = numCards x cardWidth + (numCards + 1) x spaceWidth现在很容易计算所需的空间,即(componentWidth - numCards x cardWidth) / (numCards + 1)所以卡片的左侧位置是leftMargin + spaceWidth x cardNum + cardWidth x (cardNum - 1)

当空间为负时必须小心,然后您必须计算卡片必须重叠多少。

于 2011-12-06T08:59:26.643 回答
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大于卡的可用空间,使用此解决方案卡仍然可以重叠边距。

于 2011-12-06T08:53:38.873 回答