我有一个点数组和一个面板。 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/

10-12 00:38
查看更多