如何旋转浮动动作按钮而不旋转阴影?

kan*_*ndi 11 android rotation android-animation floating-action-button

我以这么简单的方式旋转FAB:

fab.startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate));
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

这有效,但与FAB一起,它的阴影旋转.但我只需要FAB旋转(甚至它的src图像,如果有任何差异).

sri*_*san 26

您是否尝试过Compat库提供的animate方法?使用Animation utils时我也遇到了同样的问题

final OvershootInterpolator interpolator = new OvershootInterpolator();
ViewCompat.animate(fab).
           rotation(135f).
           withLayer().
           setDuration(300).
           setInterpolator(interpolator).
           start();
Run Code Online (Sandbox Code Playgroud)

  • 这仍然是旋转阴影 (2认同)
  • 设计支持lib 23.2.0正常工作!没有阴影旋转(在6.0,4.4测试).OvershootInterpolator很酷:) (2认同)

Art*_*miy 13

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();
}
Run Code Online (Sandbox Code Playgroud)


小智 5

最短路线: 顺时针旋转:

fab.animate().rotationBy(135f) // 135f = 135 degree.
Run Code Online (Sandbox Code Playgroud)

对于逆时针旋转(重置到初始位置):

fab.animate().rotationBy(-135f) // 135f = 135 degree.
Run Code Online (Sandbox Code Playgroud)