我不能强制使用onView的onDraw()方法吗?

时间:2016-02-17 05:12:17

标签: android

我查看了日志,似乎调用了customView的onDraw()方法,而不是在实例化时调用,而是在活动的onCreate()方法之后调用。含义

onCreate(){
     log1
     CustomView CV = new CustomView();
     log2
}
class CustomView{
      onDraw(){
           log3
      }
}

导致log1-> log2-> log3 .. 但我在onCreate中使用绘制的自定义视图有一些代码,这意味着它应该在View的实例化中完成onDraw()方法。 CV.invalidate不起作用...请帮忙

3 个答案:

答案 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()获取此实例。