web-dev-qa-db-ja.com

影を回転させずにフローティングアクションボタンを回転させる方法は?

私は次のような簡単な方法で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イメージも)。

12
kandi

Compatライブラリが提供するanimateメソッドを試してみましたか? Animationutilsを使用するときに私も同じ問題を抱えていました

final OvershootInterpolator interpolator = new OvershootInterpolator();
ViewCompat.animate(fab).
           rotation(135f).
           withLayer().
           setDuration(300).
           setInterpolator(interpolator).
           start();
26
srinivasan
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();
}
13
Artemiy

私にとって完璧に機能するまったく別のアプローチがあります(受け入れられた回答で提案されたものは、プレ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の値までアニメーション化して、境界を超えないようにします。

4
Grishka

同じことは、オブジェクトアニメーターを介して達成できます。

  moveRight.rotation = -180f
0
Hitesh Sahu