在做刮刮卡抽奖UI,要计算刮奖区域,达到一定比例时刷新视图干掉覆盖层,在开始时,刷新出错:
09-15 14:27:57.755: E/AndroidRuntime(30044): FATAL EXCEPTION: Thread-662
09-15 14:27:57.755: E/AndroidRuntime(30044): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
09-15 14:27:57.755: E/AndroidRuntime(30044): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4770)
09-15 14:27:57.755: E/AndroidRuntime(30044): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:878)
09-15 14:27:57.755: E/AndroidRuntime(30044): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4075)
09-15 14:27:57.755: E/AndroidRuntime(30044): at android.view.View.invalidate(View.java:10386)
09-15 14:27:57.755: E/AndroidRuntime(30044): at android.view.View.invalidate(View.java:10341)
09-15 14:27:57.755: E/AndroidRuntime(30044): at com.example.xiangpica.MyView.clear(MyView.java:250)
09-15 14:27:57.755: E/AndroidRuntime(30044): at com.example.xiangpica.MyView$MyThread$1.dispatchMessage(MyView.java:213)
09-15 14:27:57.755: E/AndroidRuntime(30044): at android.os.Looper.loop(Looper.java:137)
09-15 14:27:57.755: E/AndroidRuntime(30044): at com.example.xiangpica.MyView$MyThread.run(MyView.java:222)
经过查看,貌似是因为跨线程操作视图,后来考虑到有可能是子线程中的handler也不能刷新主线程视图,所以
将invalidate方法改为postInvalidate
OK,问题解决!