关于先双击后单击
如果先双击了,然后在动画执行过程当中又单击了,会怎么样呢?
如果先双击了,然后在动画执行过程当中又单击了,会怎么样呢?
2017-07-22
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,动画是正常的
总的来说就是双击和单击这两个线程的执行时间和顺序的问题。
举报