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

あなたのレイアウトを理解しているかどうかはわかりませんが、次のようなものだと思います。

|マージン|スペース|カード|スペース|カード|スペース|マージン|

また

|マージン|スペース|カード|スペース|マージン|

したがって、スペースの数はカードの数よりも 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 に答える