关于先双击后单击

来源:3-4 加速球的单击动画实现

全是甘货

2017-07-22 16:44

如果先双击了,然后在动画执行过程当中又单击了,会怎么样呢?

写回答 关注

3回答

  • 奇迹3
    2017-10-15 18:46:15
    已采纳
    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,动画是正常的


    总的来说就是双击和单击这两个线程的执行时间和顺序的问题。

    全是甘货

    非常感谢!

    2017-10-16 00:28:31

    共 1 条回复 >

  • 慕移动9181930
    2022-03-28 19:11:31

    大赞!逻辑清晰了许多!

    ezqczrtlqkmijhfk

  • 奇迹3
    2017-10-21 09:09:12

    一起努力呢

360加速球核心效果实现

Android开发仿360加速球核心效果,助小伙伴进阶,学习之后收获满满

17938 学习 · 19 问题

查看课程