有一个按钮在涟漪动画结束时执行OnClickListener(材质主题)
我正在观察Android上的按钮上的涟漪动画错误。 基本上,我有一个ViewGroup,称它为包含2个按钮的ButtonContainer,称它们为OkButton和CancelButton。 当用户点击CancelButton时,我想通过将其可见性设置为GONE来隐藏ButtonContainer。 但是这会导致副作用,CancelButton上的波纹动画会排队,但从未播放,并且下次ButtonContainer变为可见时它会播放。 这似乎是因为按钮的OnClickListener在涟漪动画有机会播放之前触发的。 本文描述了这个确切的错误,并展示了视图的行为:链接
作者提出了一种解决方法,但我想知道,在播放按钮上的涟漪动画之后,是否有办法让OnClickListener被触发?
简短的回答:不是真的,根据材料准则(AFAIK),您不应该以这种方式延迟onClick执行。 在我看来,这会导致用户体验相当差 - 我喜欢我的按钮活泼,我不喜欢等待花哨的动画。
中等长度的半答案:你可以做一个快速的黑客攻击,并在足够延迟的情况下将onClick逻辑的内容包裹在.postDelayed(...)调用中。 如果延迟适当,行动将在波动之后发生。 这是一个黑客,它很脆弱,我会建议你不要这个解决方案。
漫长的回答:您实际上可以确定Ripple是否完成了动画制作,尽管该路径有点复杂。 纹波是可绘制的,并且与所有动画Drawables一样,它通过回调告诉View何时执行动画(以及何时完成动画)。 你可以利用这个回调函数来确定动画何时结束。
例如,您可以实现自己的回调,将所有呼叫转发给Ripple的托管ViewGroup,并告诉您动画何时完成,以便您可以开展业务。
作为底线,我认为你应该:
上一篇: Have a button execute OnClickListener on end of ripple animation(Material theme)
下一篇: Get files modified/added/removed from a commit in LibGit2Sharp