7

Böyle basit bir şekilde FAB döndürmek:Gölge döndürmeden yüzer eylem düğmesi nasıl döndürülür?

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

rotate.xml: onun gölgesi döner

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

Bu çalışır, ancak birlikte FAB ile. Ancak, yalnızca bir FAB'nin dönmesi (veya herhangi bir fark varsa, src görüntüsünün) olmasına ihtiyacım var.

+0

FAB üzerinden ImageView'ı döndürme konusundaki çözümüm http://stackoverflow.com/questions/29426138/rotating-floatingactionbutton/33169100#33169100 –

cevap

18

Uyumluluk kütüphanesi tarafından sağlanan animasyon yöntemini denediniz mi? kullanırken ben de aynı sorunu vardı Animasyon utils (kabul yanıt ön L Kısaltılmış gölge üretir bir önerilen) benim için sorunsuz çalışır tamamen başka bir yaklaşım var

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

Bu hala gölge –

+1

'u döndürüyor ve garip bir gölge kırpma oluşturuyor! –

+2

tasarım desteği lib 23.2.0 ile tamam çalışıyor! gölge dönüşü yok (6.0, 4.4 üzerinde test edilmiştir). OvershootInterpolator havalıdır :) –

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

. Bir XML drawable oluşturun ve bunun gibi bir <rotate> etiketi içine FAB simgesini sarın:

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

Set FAB'a bu çekilebilirler ve onun doğrudan düzeyinde veya FAB kendisinin imageLevel özelliğini ya animasyon; 0 ile 10000 arasındadır. OvershootInterpolator'u isterseniz, toDegrees'u 90 olarak ayarlayın ve 5000 değerine kadar olan seviyeyi canlandırın, böylece sınırların ötesine gitmez.

+0

yan not: Eğer çizilebilir vektör ise, bitmap kullanamazsınız, bunun yerine aşağıdakileri deneyebilirsiniz: ' guness