2011-12-21 19 views
5

Devo ruotare un pulsante (o il testo all'interno, è lo stesso) per grado casuale mediante codifica. C'è qualche button.setRotate (x) in livello API inferiore a 11 ??Ruota un pulsante (o il testo all'interno) nel codice

+0

cosa c'è di sbagliato in questa domanda? –

+0

Non mostra alcuno sforzo di ricerca. Apri il documento di classe 'Button', usa la funzione di ricerca del tuo browser e digita' rotation' nel campo di ricerca e vedrai cosa intendo. –

+0

Ho cercato molto, ma la maggior parte delle domande riguarda la rotazione delle immagini premendo il pulsante ... non ruotare il pulsante stesso. nella documentazione, ho trovato solo "setRotation (float) = rotazione del VIEW, in gradi" .. Non so come implementare per ruotare il pulsante. button.setRotate (x) non funziona. –

risposta

4

Ok, ho dato un'occhiata e la risposta è: è complicato.

È possibile ruotare il pulsante utilizzando il vecchio framework di animazione, ad es. in questo modo:

Button button = (Button) findViewById(R.id.button); 

// rotation from 0 to 90 degrees here 
RotateAnimation a = new RotateAnimation(0, 90); 
a.setFillAfter(true); 
a.setDuration(0); 
button.startAnimation(a); 

Il problema qui è che il pulsante sembra ruotato, ma non può essere cliccato correttamente. Le coordinate che attivano l'evento click sono quelle nell'area in cui si trovava il pulsante prima di essere ruotate.

Poiché questa non è una soluzione molto buona, la soluzione migliore è probabilmente scrivere una vista personalizzata che estenda la classe Button e ruoti la tela dei pulsanti in onDraw(). In questo caso devi anche sostituire lo onMeasure(). Vedi Custom Components per un'introduzione su cosa fare.

Oltre a ciò, è possibile provare a intercettare gli eventi di clic dal layout principale dei pulsanti e attivare l'evento appropriato quando il clic si è verificato all'interno delle coordinate correnti dei pulsanti. Questo è un po '"hacky" però.

+0

domani ci proverò! i miei pulsanti sono quadrati, quindi potrebbe funzionare. –

+1

aggiungendo le informazioni pivot per centrare l'animazione, è perfetto !! Grazie RotateAnimation a = new RotateAnimation (0, 90, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); –

+0

per favore im nuovo per Android Devlopment, potresti mostrarmi come estendere la classe pulsante, con il suo codice di rotazione? – Mehdi

Problemi correlati