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 № 1La 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.