nvalidate()得在UI线程中被调动,在工作者线程中可以通过Handler来通知UI线程进行界面更新。
postInvalidate()在工作者线程中被调用。
我在看有的五子棋源码的时候,里面有以下一段
- Java code
public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { switch (mGameState) { case GAMESTATE_PRE: 。。。 case GAMESTATE_RUN: { 。。。 break; case GAMESTATE_PAUSE: 。。。 break; case GAMESTATE_END: 。。。 break; } this.invalidate(); } return true; }
这样写是不是不合法,虽然能运行。应该搞一个Handler,在Handler里面invalidate的吧
------解决方案--------------------
其实你的UI更新完全可以是在点击游戏屏幕时进行更新,所以不需要做什么都要UI更新,你要invalidate()无非也就是重绘棋盘和棋子.
------解决方案--------------------
怎么看还是在ui线程呢
------解决方案--------------------
我觉得合法,因为按键事件和触屏事件都是在UI线程中触发的。
------解决方案--------------------
同意楼上
------解决方案--------------------
有啥不合法的,能运行就是合法。。。
------解决方案--------------------
这是个自定义view吧