【发布时间】:2018-07-27 13:47:36
【问题描述】:
使用自定义视图我发现有些奇怪:
我注意到setBackgroundColor() 调用了onDraw()
到目前为止一切顺利
由于我想创建对 onDraw 的递归调用,我将 setBackgroundColor() 放在 onDraw() 中,期望 onDraw() 将永远被嵌套的 setBackgroundColor() 调用。
然而,这并没有发生,奇怪的事情发生了:
最初的onDraw() 代码被触发,当setBackgroundColor() 行被执行时,onDraw() 的代码继续正常运行(好像它不是递归调用)并且只有当onDraw() 返回时,是不是@ 987654331@ 再次被呼叫。
所以我对自己说,也许setBackgroundColor() 只会引发一个标志,让系统对onDraw() 的调用进行排队,也许系统会等待最初的onDraw() 调用返回,然后才称它为第二次。
但是当第二个onDraw() 被调用时(由于setBackgroundColor() 所谓的系统标志),代码运行正常,并且没有调用第三个调用。setBackgroundColor() 怎么可能只引发一次递归调用?
这是代码: 计数器达到 2 并停止:
public class MyView extends View {
int counter;
public MyView(Context context) {
super(context);
counter = 0;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
counter++;
setBackgroundColor(Color.GREEN);
}
}
【问题讨论】:
标签: java android android-animation android-view android-custom-view