刚刚开始学习Android
参考了这篇帖子http://www.oschina.net/code/snippet_54100_1423学习绘制正弦曲线
里面用Timer和TimerTask做了计时器
想起Android例子贪食蛇程序里用Handler做的计时器,就想在把这个程序改改试试。
RefreshHandler mRedrawHandler = new RefreshHandler(); class ClickEvent implements OnClickListener{ public void onClick(View v){ //第一个按钮是直接绘制,这时候要让计时器停下来 if(v == btnSimpleDraw){ SimpleDraw(Y_axis.length-1); if(mRedrawHandler!=null){ //因为每次sleep里都要sendmessage,所以要清空消息 mRedrawHandler.removeMessages(0); } //第二个按钮是一段一段的绘制,也就是调用计时器 }else if(v == btnTimerDraw){ oldY = centerY; ClearDraw(); //sendmessage后handlemessage就开始执行了,通过不断调用sleep,不断sendmessage实现计时器 mRedrawHandler.sendMessageDelayed(mRedrawHandler.obtainMessage(0), 6); } } } //这里是继承Handler的类RefreshHandler(用贪食蛇里的懒得改名字了) class RefreshHandler extends Handler { @Override //这里是每次要完成的功能,即绘制一段曲线 public void handleMessage(Message msg) { SimpleDraw(currentX); currentX++; if(currentX == Y_axis.length-1){ ClearDraw(); currentX = 0; oldY = centerY; } //绘制之后调用sleep this.sleep(6); } public void sleep(long delayMillis) { this.removeMessages(0); //这里是等待一段时间后再次发消息 sendMessageDelayed(obtainMessage(0), delayMillis); } };
发现了一个问题就是一定要在onPause里removeMessages(0),否则退出的时候会报错。