为了账号安全,请及时绑定邮箱和手机立即绑定

关于先双击后单击

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

正在回答

3 回答

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,动画是正常的


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

0 回复 有任何疑惑可以回复我~
#1

全是甘货 提问者

非常感谢!
2017-10-16 回复 有任何疑惑可以回复我~

大赞!逻辑清晰了许多!

ezqczrtlqkmijhfk

0 回复 有任何疑惑可以回复我~

一起努力呢

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
360加速球核心效果实现
  • 参与学习       17916    人
  • 解答问题       19    个

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

进入课程

关于先双击后单击

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信