android – 有一个按钮在涟漪动画结束时执行OnClickListener(材质主题)

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

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

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

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

答案很长:你可以确定Ripple是否完成了动画,尽管这条路有点复杂. Ripple是一个Drawable,并且作为所有动画Drawables,它通过callback告诉它View什么时候做动画(以及何时完成它).你可以利用这个回调告诉动画实际完成的时间.

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

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

>解决这个问题,因为你链接文章>如果这是一个选项,只要忘记这种情况下的涟漪效应.

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...