SurfaceView初始化顺序的问题

创建自定义的LoadingView继承SurfaceView(实现了CallBack)。需要用到屏幕宽高,将屏幕的宽高常量WIDTH,HEIGHT定义在常量类Constans中(未赋值)。然后在CallBack的surfaceCreate方法中对宽高进行了赋值。并在LoadingView的构造方法中创建了用于绘制图形的任务线程类的对象,在surfaceCreate中开启线程start。结果发现运行时线程类中的WIDTH常量并未被成功赋值,仍然为0。
调用顺序是先在surfaceCreate中赋值了后开启线程的呀。

你创建时,屏幕还没有计算完,肯定得到的就是0咯,你需要等到绘制完成,或者高度已经计算完成。
ViewTreeObserver viewTreeObserver = findViewById(R.id.testToast).getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
return false;
}
});
应该对你有帮助。