私は次のような簡単な方法でFABを回転させます。
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>
これは機能しますが、FABと一緒にその影が回転します。しかし、回転するのに必要なのはFABだけです(または、違いがある場合はそのsrcイメージも)。
Compatライブラリが提供するanimateメソッドを試してみましたか? Animationutilsを使用するときに私も同じ問題を抱えていました
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();
}
私にとって完璧に機能するまったく別のアプローチがあります(受け入れられた回答で提案されたものは、プレLでクリップされた影を生成します)。 XMLドローアブルを作成し、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>
このドローアブルをFABに設定し、そのレベルを直接アニメーション化するか、FAB自体のimageLevel
プロパティをアニメーション化します。 0から10000になります。OvershootInterpolator
が必要な場合は、toDegrees
を90に設定し、レベルを5000の値までアニメーション化して、境界を超えないようにします。
同じことは、オブジェクトアニメーターを介して達成できます。
moveRight.rotation = -180f