/ / Come posso creare un semplice pulsante rettangolare arrotondato in libgdx? - libgdx

Come faccio a creare un semplice pulsante rettangolo arrotondato in libgdx? - libgdx

Come faccio a creare un semplice pulsante rettangolo arrotondatoin libgdx senza usare le immagini? Il pulsante dovrebbe avere un'ombra discendente e dovrebbe gestire lo stato premuto. Voglio che sia programmatico per facilitare la modifica del colore, dello stile in seguito, ecc.

risposte:

1 per risposta № 1

La mia comprensione della tua domanda era come creare un rettangolo arrotondato all'interno del programma senza dover pre-generare immagini al di fuori del codice.

Ero in una situazione simile qualche tempo fa e ho finito di scrivere la funzione di seguito che genera un Pixmap rettangolo arrotondato basato sui parametri (tutte le unità sono in pixel). Funziona anche con valori alfa diversi per consentire l'opacità (motivo per cui ce ne sono due Pixmap oggetti usati).

Il risultato Pixmap può quindi essere facilmente passato a un costruttore di a Texture se lo trovi più facile da renderizzare.

public static Pixmap createRoundedRectangle(int width, int height, int cornerRadius, Color color) {

Pixmap pixmap = new Pixmap(width, height, Pixmap.Format.RGBA8888);
Pixmap ret = new Pixmap(width, height, Pixmap.Format.RGBA8888);

pixmap.setColor(color);

pixmap.fillCircle(cornerRadius, cornerRadius, cornerRadius);
pixmap.fillCircle(width - cornerRadius - 1, cornerRadius, cornerRadius);
pixmap.fillCircle(cornerRadius, height - cornerRadius - 1, cornerRadius);
pixmap.fillCircle(width - cornerRadius - 1, height - cornerRadius - 1, cornerRadius);

pixmap.fillRectangle(cornerRadius, 0, width - cornerRadius * 2, height);
pixmap.fillRectangle(0, cornerRadius, width, height - cornerRadius * 2);

ret.setColor(color);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
if (pixmap.getPixel(x, y) != 0) ret.drawPixel(x, y);
}
}
pixmap.dispose();

return ret;
}

Utilizzando questa funzione non dovrebbe essere troppo difficile creare il proprio oggetto wrapper (ad es. RoundedRectangle) che ridisegnerebbe l'immagine ogni volta che uno dei parametri veniva modificato e doveva essere reso.