有一个按钮在纹波动画结束时执行OnClickListener(材质主题)

时间:2015-05-12 21:07:33

标签: android animation android-5.0-lollipop

我在Android上的按钮上观察到波纹动画的错误。基本上,我有一个ViewGroup,称它为ButtonContainer,包含2个按钮,称之为OkButton和CancelButton。当用户点击CancelButton时,我想隐藏ButtonContainer,方法是将其设置为GONE。但这会导致副作用,即CancelButton上的波纹动画排队,但从未播放,并且下次ButtonContainer变为可见时播放。这似乎是因为在涟漪动画有机会播放之前触发了按钮的OnClickListener。本文介绍了这个确切的错误,并显示了视图的确切行为:link

作者提出了一种解决方法,但是我想知道,在播放按钮上的涟漪动画后,有没有办法让OnClickListener被解雇

1 个答案:

答案 0 :(得分:5)

简短回答:并非真的,根据材料指南(AFAIK),您不应该以这种方式延迟onClick执行。在我看来,这将导致非常糟糕的用户体验 - 我喜欢我的按钮活泼,我不喜欢等待花哨的动画。

中等长度的半答案:你可以快速破解并在.postDelayed(...)通话中包含onClick逻辑的内容并且延迟时间足够长。如果有适当的延迟,动作将在波纹之后发生。这是一个黑客,它是脆弱的,我会建议你反对这个解决方案。

答案很长:你实际上可以确定Ripple是否已完成动画,尽管该路径有点复杂。 Ripple是一个Drawable,并且作为所有动画Drawables,它告诉它View何时用callback做动画(以及何时完成)。您可以使用此回调来判断动画何时实际结束。

E.g。您可以为此实现自己的回调,将所有调用转发给Ripple的托管ViewGroup,并告诉您动画何时完成,以便您可以开展业务。

作为底线,我认为你应该:

  • 解决此问题,因为文章是您链接的
  • 如果这是一个选项,请忘记这种情况下的涟漪效应。