[英]How to rotate floating action button without rotating shadow?
我以如此簡單的方式旋轉 FAB:
fab.startAnimation(AnimationUtils.loadAnimation(this, R.anim.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>
這有效,但與 FAB 一起,它的陰影會旋轉。 但是我只需要 FAB 來旋轉(或者甚至是它的 src 圖像,如果有任何區別的話)。
您是否嘗試使用 Compat 庫提供的 animate 方法? 使用 Animation utils 時我也遇到了同樣的問題
final OvershootInterpolator interpolator = new OvershootInterpolator();
ViewCompat.animate(fab).
rotation(135f).
withLayer().
setDuration(300).
setInterpolator(interpolator).
start();
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();
}
有一種完全另一種方法對我來說完美無缺(接受的答案中建議的方法會在 pre-L 上產生一個剪切陰影)。 創建一個 XML drawable 並將您的 FAB 圖標包裝到一個<rotate>
標簽中,如下所示:
<?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>
將此 drawable 設置為您的 FAB,並直接為其級別或 FAB 本身的imageLevel
屬性設置動畫; 它從 0 到 10000。如果您想要OvershootInterpolator
,則將toDegrees
設置為 90 並將級別設置為 5000 的動畫,這樣它就不會超出范圍。
最短方式:順時針旋轉:
fab.animate().rotationBy(135f) // 135f = 135 degree.
逆時針旋轉(復位到初始位置):
fab.animate().rotationBy(-135f) // 135f = 135 degree.
同樣可以通過對象動畫器實現:
moveRight.rotation = -180f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.