我查看了日志,似乎调用了customView的onDraw()方法,而不是在实例化时调用,而是在活动的onCreate()方法之后调用。含义
onCreate(){
log1
CustomView CV = new CustomView();
log2
}
class CustomView{
onDraw(){
log3
}
}
导致log1-> log2-> log3 .. 但我在onCreate中使用绘制的自定义视图有一些代码,这意味着它应该在View的实例化中完成onDraw()方法。 CV.invalidate不起作用...请帮忙
答案 0 :(得分:0)
您的活动无法保证在onCreate()
期间可见,因此现在不是做任何需要视图存在于屏幕上的活动的好时机。
onCreate()
是一个很好的时间来执行布局并找到稍后需要在代码中引用的视图,但现在还不是开始在屏幕上绘图的时候。
相反,您应该在onResume()
方法中设置视图的状态。 `onResume()将在您的活动变得可见之后立即执行。您将保证在那时获得您的观点。
答案 1 :(得分:0)
这个怎么样?
onCreate(){
CustomView cv = new CustomView();
... draw something
}
class CustomView{
onDraw(){
}
}
到
onCreate(){
CustomView cv = new CustomView();
cv.initialDraw = true;
}
class CustomView(
boolean initialDraw = false;
onDraw(){
if(initialDraw){
...draw something
initialDraw = false;
}
}
}
答案 2 :(得分:0)
onDraw()直到Android测量并布置了所有视图后才会发生。在onCreate()期间肯定不会发生此过程,并且该过程与活动生命周期无关。
如果您需要知道onDraw()何时发生,您应该在OnDrawListener上为当前视图层次结构注册ViewTreeObserver回调。使用View.getViewTreeObserver()获取此实例。