2015-05-12 50 views
7

我正在觀察Android上的按鈕上的漣漪動畫的錯誤。基本上,我有一個ViewGroup,稱它爲包含2個按鈕的ButtonContainer,稱它們爲OkButton和CancelButton。當用戶點擊CancelButton時,我想通過將其可見性設置爲GONE來隱藏ButtonContainer。但是這會導致副作用,CancelButton上的波紋動畫會排隊,但從未播放,並且下次ButtonContainer變爲可見時它會播放。這似乎是因爲按鈕的OnClickListener在漣漪動畫有機會播放之前觸發的。本文介紹了此精確的錯誤,並顯示視圖究竟是如何表現:link讓一個按鈕在漣漪動畫結尾處執行OnClickListener(Material主題)

筆者提出一個解決辦法,但我想知道,有沒有辦法有OnClickListener得到後紋波動畫發射上的按鈕是玩過嗎?

回答

4

簡短回答:不是真的,根據材料指南(AFAIK),您不應該以這種方式延遲onClick執行。在我看來,這會導致用戶體驗相當差 - 我喜歡我的按鈕活潑,我不喜歡等待花哨的動畫。

的中等長度的半答案:你可以做一個快速的黑客,包裝你的onClick邏輯的肉在.postDelayed(...)調用帶好足夠的延遲。如果延遲適當,行動將在波動之後發生。這是一個黑客,它很脆弱,我會建議你不要這個解決方案。

長答案:實際上,您可以確定Ripple是否已完成動畫,但該路徑有點複雜。紋波是可繪製的,並且與所有的動畫Drawables一樣,它會通過callback告訴View何時執行動畫(以及何時完成動畫)。你可以利用這個回調函數來確定動畫何時結束。

E.g.您可以實現自己的回調,將所有呼叫轉發給Ripple的託管ViewGroup,並告訴您動畫何時完成,以便您可以開展業務。

至於底線,我認爲你應該:

  • 的文章做,你鏈接
  • 忘掉在這種情況下產生的連鎖反應,如果這是一個選項可以解決這個問題。