我在安卓的Textview类中看到了这个:
在Android的
@Override
protected void onDraw(Canvas canvas) {
restartMarqueeIfNeeded();
// Draw the background for this view
super.onDraw(canvas);
在Android的
View
类中,我发现它是空的:/**
* Implement this to do your drawing.
*
* @param canvas the canvas on which the background will be drawn
*/
protected void onDraw(Canvas canvas) {
}
如果超类的方法为空,为什么还要调用它呢?
带参数canvas的方法在哪里被调用了?
参数canvas是由安卓系统自动传递的吗?
ondraw方法是由谁何时调用的?
当被重写时,子类的方法会代替超类的方法被调用吗?
这是我的自定义视图示例:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyView(this));
}
}
class MyView extends View {
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
谁调用了MyView.OnDraw方法?
肯定有一行代码调用了MyView.OnDraw方法,不是吗?
onDraw
方法中使用Thread#dumpStack()
,并查看logcat
。 - pskink