简介 目录 评价 推荐
  • 全是甘货 2017-07-22
    关于先双击后单击
    已采纳 奇迹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,动画是正常的


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

    3回答·1628浏览
  • qq_昨天的遗忘_04423295 2016-12-27
    自定义view的ondraw方法不运行

    确认自己已继承某个View/ViewGroup,确定你的onDraw方法在添加@Override注解后,Android Studio/Eclipse不会报警告,错误提示。所以猜测如下:

    1. 你没有继承特定的View,没有继承是没有这个方法回调的

    2. 你的onDraw(Canvas c)不是系统提供的,而是你自己定义的一个重载方法,如果是重载添加@Override注解是会报警告的

    3. 你的onDraw方法已经执行了,只是你没有看到预期的效果,认为它没有运行

    1回答·2250浏览
数据加载中...
开始学习 免费