Android PopupWindow dismiss 在中途中断涟漪效果

Android PopupWindow dismiss interrupts the ripple effect half way through

我有一个 PopupWindow,它使用带有单个 Button 的自定义布局。

Buttonandroid:background="?attr/selectableItemBackground" 设置为具有涟漪效应。如果没有 dismiss 调用,连锁反应效果很好。

当我在 OnClickListener 的弹出窗口上调用 dismiss 时,涟漪效果在关闭过程中被打断。您可以从波纹中看到圆圈,但随着 PopupWindow 逐渐消失,它并没有走到边缘,波纹在中途被打断,您可以在弹出窗口消失时看到一个圆圈。

就好像解雇是在中途停止动画。任何人都知道为什么以及如何解决它?

我遇到了这个问题,花了 2 周的时间才解决它。是的 dismiss Popup Window 是罪魁祸首,action dismiss() stops/clears 所有未决的动画。

这是我在自定义弹出窗口中显示单击项目时的涟漪效果所做的工作Window:

    // Define click listener for the ViewHolder's View.
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ViewCompat.postOnAnimationDelayed(v, new Runnable()
            {
                @Override
                public void run()
                {
                    Log.i("test", "Position: "+position);
                    // Perform Action
                }
            }, 150); // Delay the onClick action

        }
    });

这会将 onClick 操作延迟 150 微秒,这将允许在 dismiss() 被触发 Popup 之前发生连锁反应 Window。

您必须调整 onClick delay/duration 和 dismiss fade 动画持续时间以使其按预期工作。