FAB涟漪效应持续存在于视界之外

时间:2016-11-03 14:42:35

标签: android material-design floating-action-button visual-glitch

在我的所有布局上,我的FloatingActionButtons'如果用户将手指抬离FAB视图之外,则涟漪效应会持续存在。即用户按下白色FAB,波纹发生FAB灰色,用户将手指拉离按钮并抬起,按钮保持灰色。

以下是fab XML示例:

<android.support.design.widget.FloatingActionButton
            android:id="@+id/fab_pinfav"
            android:layout_width="@dimen/fab_size"
            android:layout_height="@dimen/fab_size"
            android:src="@drawable/icon_unfavd"
            app:elevation="8dp"
            android:elevation="8dp"
            android:layout_gravity="bottom|end"
            android:layout_marginRight="@dimen/spacingMedium"
            android:layout_marginEnd="@dimen/spacingMedium"/>

所有FAB都是不同基本CoordinatorLayouts的直接孩子,即

<android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

在从Android 5.1到Android 7.1的各种设备上进行测试,每个设备都有相同的问题。

我对其他观点没有看到任何类似的事件,因为它们会对触摸效果做出反应。

编辑:相关的Google问题https://code.google.com/p/android/issues/detail?id=218956(请参阅&#39;问题#2&#39;)此问题出现在Design Library v25.0.0中,而不存在于v23.4.0中

最终编辑:此错误已通过支持库25.1.0发布https://developer.android.com/topic/libraries/support-library/revisions.html#修复 如果遇到此问题,请将支持库版本更新为25.1.0。

1 个答案:

答案 0 :(得分:5)

我认为这是因为在Lollipop之前版本中修复合并以纠正FloatingActionButton的可点击区域。如果触摸发生在内容区域之外,则此修复会覆盖onTouchEvent()方法以返回false。不幸的是,这会阻止任何进一步传递给View的触摸事件,因此它永远不会收到ACTION_UP,因此不会相应地更新其按下的状态。

我们应该能够通过继承FloatingActionButton来修复此修复,自己覆盖onTouchEvent(),检查super调用的返回,并在事件发生时正确设置按下状态内容区域。

public class CustomFAB extends FloatingActionButton {

    public CustomFAB(Context c, AttributeSet a) {
        super(c, a);
    }

    // Additional constructors as needed
    // ...

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        boolean result = super.onTouchEvent(ev);
        if (!result) {
            setPressed(false);
        }
        return result;
    }
}