Java 即使在构造函数上使用setWillNotDraw(false),也不会调用RelativeLayout onDraw
我从RelativeLayout创建了一个子类,当我调用invalidate方法时,他没有调用OnDraw方法,下面是我的代码:Java 即使在构造函数上使用setWillNotDraw(false),也不会调用RelativeLayout onDraw,java,android,Java,Android,我从RelativeLayout创建了一个子类,当我调用invalidate方法时,他没有调用OnDraw方法,下面是我的代码: handler = new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what == GameGlobals.UpdateDraw){ gameHandler.inval
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == GameGlobals.UpdateDraw){
gameHandler.invalidate();
}
super.handleMessage(msg);
}
};
Button btt_start = (Button)findViewById(R.id.btt_start);
btt_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
setContentView(gameHandler);//The sub class from RelativeLayout
try {
gameHandler.setup(handler);
} catch (Exception e) {
showAlert(e.getMessage());
}
Thread thread = new Thread(gameHandler);
thread.run();
}
});
现在是子类:
//this method is called int the three constructors
private void setup(){
setWillNotDraw(false);
}
@Override//from Runnable
public void run() {
Message msg = new Message();
msg.what = GameGlobals.UpdateLogic;
handler.sendMessage(msg);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.drawText("testing..", 90, 90, textInfo);
canvas.restore();
}
好的,就这些,我已经调试了代码,我看到的是:onDraw方法只被调用了两次:当它被创建时,然后当invalidate方法第一次被调用时,仅此而已,他不会一直调用invalidate,这是一个线程!方法运行在那里,为什么他不再被调用??我将感谢您的帮助您的run()方法中没有循环。。因此,它会触发一次invalidate调用,休眠10毫秒,然后退出 乌欧。是的,我忘记了这一点,现在“run”上的循环工作了,但是“draw”方法没有被调用,应用程序被困在一个循环中,导致它在短时间后崩溃,他甚至没有离开活动的当前COntentView