7

ich drehen die FAB auf so einfache Art und Weise:Wie kann man den Floating-Action-Button drehen, ohne den Schatten zu drehen?

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> 

Dies funktioniert, aber zusammen mit dem FAB seinen Schatten dreht. Aber ich brauche nur den FAB zu drehen (oder sogar sein src Bild, wenn es irgendeinen Unterschied gibt).

+0

Meine Lösung mit rotierenden ImageView über FAB http://stackoverflow.com/questions/29426138/rotating-floatingactionbutton/33169100#33169100 –

Antwort

18

Haben Sie mit der Animate-Methode der Compat-Bibliothek versucht? Auch ich hatte das gleiche Problem bei der Verwendung von Animation, utils

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

Dies ist immer noch rotate shadow –

+1

und führen Sie einen seltsamen Schattenausschnitt auch! –

+2

funktioniert ok mit Design-Unterstützung lib 23.2.0! keine Schattenrotation (getestet an 6.0, 4.4). OvershootInterpolator ist 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

Es ist eine ganz andere Vorgehensweise, die einwandfrei funktioniert für mich (die vorgeschlagen in der akzeptierten Antwort einen abgeschnittenen Schatten auf Pre-L erzeugt). Erstellen Sie ein XML ziehbar und wickeln Sie Ihr FAB-Symbol in einen <rotate> Tag wie folgt:

<?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> 

Sets dieses ziehbar zu Ihrer FAB, und animiert entweder das Niveau direkt oder imageLevel Eigenschaft des FAB selbst; Es geht von 0 bis 10000. Wenn Sie eine OvershootInterpolator möchten, dann setzen Sie toDegrees auf 90 und animieren Sie die Ebene bis zum Wert von 5000, damit es nicht über die Grenzen hinausgeht.

+0

Randnotiz: Wenn Zeichnungsvektor ist, können Sie Bitmap nicht verwenden, stattdessen könnten Sie es versuchen: ' guness