7

ruoto FAB in modo così semplice:Come ruotare il pulsante di azione fluttuante senza ombra rotante?

fab.startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate)); 

rotate.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <rotate 
     android:fromDegrees="0" 
     android:toDegrees="360" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:duration="1000"/> 
</set> 

Questo funziona, ma insieme con la FAB sua ombra ruota. Ma ho bisogno solo del FAB per ruotare (o anche la sua immagine src, se c'è qualche differenza).

+0

La mia soluzione con rotazione di ImageView su FAB http://stackoverflow.com/questions/29426138/rotating-floatingactionbutton/33169100#33169100 –

risposta

18

Hai provato con il metodo animato fornito dalla libreria di compatibilità? Anch'io ho avuto lo stesso problema quando si utilizza Animazione utils

final OvershootInterpolator interpolator = new OvershootInterpolator(); 
ViewCompat.animate(fab). 
      rotation(135f). 
      withLayer(). 
      setDuration(300). 
      setInterpolator(interpolator). 
      start(); 
+2

Questa è ancora ruotare l'ombra –

+1

e introdurre anche uno strano ritaglio di ombre! –

+2

funziona bene con il supporto di progettazione lib 23.2.0! nessuna rotazione dell'ombra (testata su 6.0, 4.4). OvershootInterpolator è cool :) –

8
public void rotateFabForward() { 
    ViewCompat.animate(fab) 
      .rotation(135.0F) 
      .withLayer() 
      .setDuration(300L) 
      .setInterpolator(new OvershootInterpolator(10.0F)) 
      .start(); 
} 

public void rotateFabBackward() { 
    ViewCompat.animate(fab) 
      .rotation(0.0F) 
      .withLayer() 
      .setDuration(300L) 
      .setInterpolator(new OvershootInterpolator(10.0F)) 
      .start(); 
} 
2

C'è un tutto un altro approccio che funziona perfettamente per me (quello suggerito nella risposta accettata produce un'ombra agganciato alla pre-L). Crea un drawable XML e avvolgere la tua icona FAB in un tag <rotate> come questo:

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="45"> 
    <bitmap android:src="@drawable/ic_add_white_24dp"/> 
</rotate> 

Impostare questo drawable al FAB, e animare sia il suo livello, direttamente o la imageLevel proprietà del FAB stesso; va da 0 a 10000. Se desideri un OvershootInterpolator, imposta toDegrees su 90 e anima il livello fino al valore di 5000 in modo che non superi i limiti.

+0

nota a margine: se drawable è vettoriale, non è possibile utilizzare bitmap, ma si potrebbe provare a seguire: ' guness