我从蛇实施例采取代码直接:Android Snake示例。 onDraw是在Handlers线程还是在UI线程上执行?
C:\用户\ MYUSER \机器人-蚀\ SDK \样品\机器人-19 \遗留\蛇
public class SnakeView extends TileView {
private RefreshHandler mRedrawHandler = new RefreshHandler();
class RefreshHandler extends Handler {
@Override
public void handleMessage(Message msg) {
SnakeView.this.update();
SnakeView.this.invalidate();
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
};
public void update() {
if (mMode == RUNNING) {
long now = System.currentTimeMillis();
if (now - mLastMove > mMoveDelay) {
clearTiles();
updateSnake();
mLastMove = now;
}
mRedrawHandler.sleep(mMoveDelay);
}
}
@Override
public void onDraw(Canvas canvas) {
//Draw stuff in here
}
}
是的,我明白,无效在handleMessage中调用将强制调用onDraw。 onDraw是在处理程序线程上执行还是仍在UI线程上执行。我喜欢这个例子,但我想在UI线程上移动onDraws。
P.S.顺便说一下,我认为方法是将画布传递给线程上存在的新方法,然后使用画布进行绘制。那是怎么做的?另外目前我的印象是onDraw在UI线程上运行的是Snake示例。
我一直都很好奇,我可以通过不同的方法多次传递画布,它仍然保留其画图,但我还没有完全理解。
谢谢
这就是答案。也许我可以得到更多关于canvas作为参数的信息? – Giuseppe 2014-11-22 06:51:32
当您调用该函数时,您可以直接传递画布作为参数。 – chartsai 2014-11-22 06:58:45