【问题标题】:Is it possible to execute onDraw() right after invalidate(Rect)?是否可以在 invalidate(Rect) 之后立即执行 onDraw()?
【发布时间】:2014-06-25 00:04:53
【问题描述】:

我在我的 onDraw() 方法中添加了一个断点,并注意到我的调试器只有在 invalidate(rect) 所在的方法结束后才能到达那里。之后可以直接调用吗? 因为我需要在我的方法中调用 invalidate(rect) 两次。

提前致谢。

【问题讨论】:

    标签: java android ondraw invalidation


    【解决方案1】:

    没有。调用invalidate() 是向框架发出的信号,表明屏幕的一部分是脏的,需要重新绘制。实际绘制不会立即发生……它会在下一次通过主线程的事件队列发生。

    【讨论】:

    • 嗯嗯,我可以实现另一种方法。顺便说一句,如果我想让我的脏区两个像矩形一样分开,如果我做 invalidate(rect1) 那么 invalidate(rect2) 两个矩形都将失效,对吧?
    【解决方案2】:

    我遇到过这样的问题,正如亚历克斯所说,这不会发生。我可以建议一种解决方法,您可以拥有自己的 onDraw() 方法实现,但名称不同,例如 myOnDraw(),只有当它不应该很重时。因此,您可以立即调用或依赖 onDraw() 来调用该方法,该方法将在您需要时为您工作。

    【讨论】:

    • 如果 myOnDraw() 不是原生的 android 方法,它如何在 View 中绘制东西?
    • 你只需要 canvas ref 就可以了。而且你可能已经在你的类中覆盖了 onDraw()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多