Android - 移除按下动画的阴影

Android - removing shadow on pressed animation

我有一个 FAB,我想在两个动作之一发生时用翻转动画。第一个是屏幕内容的变化,第二个是按下 FAB 以确认操作。

我正在使用支持库 v22.2.1 中的 FAB

我正在使用这个对象动画师来做

 ObjectAnimator animation = ObjectAnimator.ofFloat(myFab, "rotationY", 0.0f, 360f);
                animation.setDuration(400);
                animation.setInterpolator(new AccelerateDecelerateInterpolator());
                animation.start();

动画按预期工作,视图翻转并且在 per-lollipop 设备上看起来很完美。

在 Lollipop 设备上它也会翻转阴影,看起来 非常糟糕 并且会分散注意力。

我将 FAB 设置为 6 海拔

   <android.support.design.widget.FloatingActionButton
    android:id="@+id/my_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:layout_margin="@dimen/fab_compat_margin"    
    app:borderWidth="0dp"
    app:elevation="6dp"/>

为了解决这个问题,我在动画开始前将高度设置为 0,然后在 onAnimationEnd 中将其设置回 6。

这在触发动画的动作不是按下的 fab 时有效。

当我按下FAB时,它仍然显示阴影,而且是更大的阴影。看起来按下状态阴影与高程阴影是分开的。

我尝试设置一个触摸侦听器并删除那里的阴影,但是由于触摸,阴影已经存在了。

关于如何绕过触摸阴影动画有什么想法吗?

我想通了。

如果我将 StateListAnimatior 设置为 null,则按下的阴影消失并且动画开始工作。

myFab.setStateListAnimator(空);

虽然这个阴影与高程阴影是分开的,所以我仍然需要在开始动画之前将它们设置为 0。

现在可以在使用Material FAB时直接设置translationZ:

app:pressedTranslationZ="0dp"
app:hoveredFocusedTranslationZ="0dp"