如题。
SurfaceView是继承自View的类,View类中有一个onDraw函数,如果是继承自View的类是可以重写onDraw函数的。
那么为什么继承自View的子类SurfaceView的类不能重写onDraw函数呢?即使写了onDraw函数,也不会自动调用,需要自己调用。
SurfaceView是继承自View的类,View类中有一个onDraw函数,如果是继承自View的类是可以重写onDraw函数的。
那么为什么继承自View的子类SurfaceView的类不能重写onDraw函数呢?即使写了onDraw函数,也不会自动调用,需要自己调用。
protected 表明被它修饰的成员变量为保护类型,在同一个包里和 public 类型是一样的,也是能够访问到的。但是如果在不同包里的 protected 类型的成员变量就只能通过子类来访问,这个修饰符是区别于其他的修饰符的。
所以SurfaceView可以访问。而SurfaceView里并没有重写onDraw,
所以View子类的子类可以重写onDraw,但不能访问,所以像你说的:即使写了onDraw函数,也不会自动调用,需要自己调用。
public void draw (Canvas canvas)Since: API Level 1
Manually render this view (and all of its children) to the given Canvas. The view must have already done a full layout before this function is called. When implementing a view, do not override this method; instead, you should implement onDraw(Canvas).
Parameters
canvas The Canvas to which the View is rendered.虽然没用过SurfaceView,但是按照sdk的说明,应该是调用draw 以此来进入到ondraw的回调中。
没注意到这么细致的地方,虽然也看到了View中onDraw是protected。
1.android-sdk-windows\doc\index.html
2.选择Reference选项卡
3.点击左侧上android.view包,左侧下在class里找到SurfaceView
4.点击SurfaceView里面的public void draw (Canvas canvas)