【问题标题】:Have a button execute OnClickListener on end of ripple animation(Material theme)让按钮在波纹动画结束时执行 OnClickListener(材质主题)
【发布时间】:2015-05-12 21:07:33
【问题描述】:

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

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

【问题讨论】:

    标签: android animation android-5.0-lollipop


    【解决方案1】:

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

    中等长度的半答案:你可以做一个快速的破解并将你的 onClick 逻辑包裹在一个 .postDelayed(...) 调用中,并有足够好的延迟。通过适当的延迟,动作将在涟漪之后发生。这是一个 hack,它很脆弱,我建议你不要使用这个解决方案。

    长答案:您实际上可以确定 Ripple 是否已完成动画,尽管该路径有点复杂。 Ripple 是一个 Drawable,和所有动画 Drawable 一样,它通过 callback 告诉它的 View 何时做动画(以及何时完成)。您可以利用此回调来判断动画何时真正完成。

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

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

    • 按照您链接的文章解决此问题
    • 在这种情况下,如果可以选择的话,请忘记涟漪效应。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      相关资源
      最近更新 更多