使用自定义视图时,我发现有些奇怪:
我注意到setBackgroundColor()
调用onDraw()
到目前为止一切都很好
并且由于我想创建对onDraw的递归调用,因此将setBackgroundColor()
放在onDraw()
内,期望onDraw()
会被嵌套的setBackgroundColor()
永远调用。
但是,那没有发生,奇怪的事情发生了:
最初的onDraw()
代码被触发,并且在执行setBackgroundColor()
行时,onDraw()
的代码保持正常运行(好像不是递归调用),并且仅在{{1 }}返回,是否再次调用了onDraw()
。
所以我对自己说,也许onDraw()
只会引发一个标志,使系统将对setBackgroundColor()
的调用排队,并且系统可能会等待最初的onDraw()
调用返回,只是第二次而已。
但是当调用第二个onDraw()
时(由于onDraw()
所谓的系统标志),代码正常运行,并且没有调用第三个调用。
setBackgroundColor()
怎么可能只引起一次递归调用?
这是代码: 计数器达到2并停止:
setBackgroundColor()
答案 0 :(得分:0)
因为只调用了两次:
super.onDraw()
setBackgroundColor(Color.GREEN);
调用super()
时不会调用MyView.onDraw()
,因为继承规则。您应该研究Java的继承。
答案 1 :(得分:0)
我不明白您要通过死循环实现的目标。在onDraw中调用setBackground是一种不好的做法。同时,setBackground不会立即触发onDraw。它使视图无效,该视图在将来的某个时候调用onDraw。
要再次绘制视图,还可以调用requestLayout()或invalidate()。