課程
/移動開發
/Android
/360加速球核心效果實現
如果先雙擊了,然后在動畫執行過程當中又單擊了,會怎么樣呢?
2017-07-22
源自:360加速球核心效果實現 3-4
正在回答
class?DoubleTapRunnable?implements?Runnable{ ????@Override ????public?void?run()?{ ????????currentProgress++; ????????if(currentProgress?<=?progress)?{ ????????????invalidate(); ????????????handler.postDelayed(doubleTapRunnable,50); ????????}?else?{ ????????????handler.removeCallbacks(doubleTapRunnable); ????????????currentProgress?=?0; ????????} ????} }
假如在雙擊的執行動畫中單擊,currentProgress在單擊事件中被賦值為50,而此時雙擊線程DoubleTapRunnable還未結束會進入到if(currentProgress <= progress)重繪一次,50ms后進入下一次雙擊線程,此時進入else塊,雙擊線程的回調被remove,而currentProgress也被賦值為0。單擊線程中又會調用invalidate();進行重繪,導致單擊動畫只有剛剛進入的一瞬間進度為50,而余下的絕大部分時間進度都為0
? ? ? ? 至于為什么雙擊動畫結束后再單擊不會出現這樣的BUG
雙擊結束后會執行雙擊線程中else塊中的這兩個語句
handler.removeCallbacks(doubleTapRunnable); ? ? ? ? ? ?currentProgress = 0;
此時雙擊線程的回調已被移除(remove),然后單擊為currentProgress賦值為50,動畫是正常的
總的來說就是雙擊和單擊這兩個線程的執行時間和順序的問題。
全是甘貨 提問者
大贊!邏輯清晰了許多!
ezqczrtlqkmijhfk
一起努力呢
舉報
Android開發仿360加速球核心效果,助小伙伴進階,學習之后收獲滿滿
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-10-15
假如在雙擊的執行動畫中單擊,currentProgress在單擊事件中被賦值為50,而此時雙擊線程DoubleTapRunnable還未結束會進入到if(currentProgress <= progress)重繪一次,50ms后進入下一次雙擊線程,此時進入else塊,雙擊線程的回調被remove,而currentProgress也被賦值為0。單擊線程中又會調用invalidate();進行重繪,導致單擊動畫只有剛剛進入的一瞬間進度為50,而余下的絕大部分時間進度都為0
? ? ? ? 至于為什么雙擊動畫結束后再單擊不會出現這樣的BUG
雙擊結束后會執行雙擊線程中else塊中的這兩個語句
handler.removeCallbacks(doubleTapRunnable);
? ? ? ? ? ?currentProgress = 0;
此時雙擊線程的回調已被移除(remove),然后單擊為currentProgress賦值為50,動畫是正常的
總的來說就是雙擊和單擊這兩個線程的執行時間和順序的問題。
2022-03-28
大贊!邏輯清晰了許多!
ezqczrtlqkmijhfk
2017-10-21
一起努力呢