Domanda

Ho un array di punti e un pannello. getWidth() si basa sul pannello. Immagina le carte in mano, quindi HAND_CARD_WIDTH è piuttosto autoesplicativo. Lo scopo di questo ciclo è di impostare i punti uniformemente attraverso il pannello, cosa che fa. Tuttavia, consente alle carte di uscire dal pannello, il che lo rende molto male. Quello che voglio fare è dare un piccolo margine vuoto su entrambi i lati del pannello, non importa quante carte hai in mano.

Ecco il codice

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

Fondamentalmente voglio il più a sinistra x Per essere almeno 20 E il più giusto per essere al massimo getWidth() - 20 - HAND_CARD_WIDTH. Voglio anche che le carte siano uniformemente distanziate ... Non riesco proprio a pensare all'equazione giusta (arrivare a questo punto è stato purtroppo un'impresa ...).

Grazie, in base alle risposte (tutte e 2) ecco cosa sono andato:

        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;
            }
        }
È stato utile?

Soluzione

Non sono sicuro di capire il tuo layout, ma penso che sia qualcosa del genere:

| Margine | Spazio | Card | Spazio | Card | Spazio | Margine |

o

| Margine | Spazio | Card | Spazio | Margine |

Quindi, il numero di spazi è uno più del numero di carte e la larghezza totale è la larghezza dei componenti meno i margini. componentwidth = numcards x cardwidth + (numcards + 1) x spacewidth Ora è facile calcolare lo spazio necessario che è (ComponentWidth - NumCards X CardWidth) / (numCards + 1) Quindi la posizione sinistra di una carta è LeftMargin + SpaceWidth x CardNum + CardWidth X (CardNum - 1)

È necessario fare attenzione quando lo spazio è negativo, quindi è necessario calcolare quanto le carte devono sovrapporsi.

Altri suggerimenti

Prova questo:

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

Così:

  • Calcola la larghezza disponibile sottraendo i margini dalla larghezza del pannello totale
  • Calcola lo spazio per ogni carta dividendo lo spazio rimanente per numero di carte
  • Per ogni carta, contiamo il punto più a sinistra prendendo il centro dello spazio della carta e sottraendo la metà della larghezza della carta.

Intendiamoci, con queste carte di soluzione possono ancora sovrapporre i margini, se HAND_CARD_WIDTH è maggiore dello spazio disponibile per la carta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top