setBackgroundColor()是否调用onDraw()?

时间:2018-07-27 13:47:36

标签: java android android-animation android-view android-custom-view

使用自定义视图时,我发现有些奇怪:

我注意到setBackgroundColor()调用onDraw()
到目前为止一切都很好
并且由于我想创建对onDraw的递归调用,因此将setBackgroundColor()放在onDraw()内,期望onDraw()会被嵌套的setBackgroundColor()永远调用。

但是,那没有发生,奇怪的事情发生了:
最初的onDraw()代码被触发,并且在执行setBackgroundColor()行时,onDraw()的代码保持正常运行(好像不是递归调用),并且仅在{{1 }}返回,是否再次调用了onDraw()

所以我对自己说,也许onDraw()只会引发一个标志,使系统将对setBackgroundColor()的调用排队,并且系统可能会等待最初的onDraw()调用返回,只是第二次而已。
但是当调用第二个onDraw()时(由于onDraw()所谓的系统标志),代码正常运行,并且没有调用第三个调用。
setBackgroundColor()怎么可能只引起一次递归调用?

这是代码: 计数器达到2并停止:

setBackgroundColor()

2 个答案:

答案 0 :(得分:0)

因为只调用了两次:

  1. 致电super.onDraw()
  2. setBackgroundColor(Color.GREEN);

调用super()时不会调用MyView.onDraw(),因为继承规则。您应该研究Java的继承。

答案 1 :(得分:0)

我不明白您要通过死循环实现的目标。在onDraw中调用setBackground是一种不好的做法。同时,setBackground不会立即触发onDraw。它使视图无效,该视图在将来的某个时候调用onDraw。

要再次绘制视图,还可以调用requestLayout()或invalidate()。