当我尝试 setTranslationX 和 setTranslationY 时 SurfaceView 出现致命异常

Fatal Exception in SurfaceView when I try to setTranslationX and setTranslationY

我在我的游戏中使用 setTranslationX 和 setTranslationY 来移动我的 SurfaceView,以便我的玩家始终位于屏幕中央。我使用的确切方法是:

mySurfaceView.setTranslationX(-player.getX() + GameActivity.GAME_WIDTH/2);
mySurfaceView.setTranslationY(-player.getY() + GameActivity.GAME_HEIGHT/2);

不幸的是,当我尝试移动我的播放器时,出现了一个致命的异常:

07-18 23:27:58.628    3059-3085/com.packname.www.gamename E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-2018
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
            at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
            at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:854)
            at android.view.ViewGroup.invalidateChildFast(ViewGroup.java:4193)
            at android.view.View.invalidateViewProperty(View.java:10423)
            at android.view.View.setTranslationX(View.java:9743)
            at com.packname.www.gamename.game.PlayState.render(PlayState.java:77)

我将如何解决这个异常?我需要我的球员在他移动时保持在屏幕中央。我也不能使用 canvas.translate(x, y) 因为这不会改变我用来移动播放器的 TouchListeners 接收到的坐标。因此,如果我使用 canvas.translate(x, y),那么我的碰撞矩形最终会位于我的播放器所在的位置。因此我需要 mySurfaceView.setTranslateX() 和 mySurfaceView.setTranslateY() 方法。

编辑:我似乎没有从正确的线程调用 setTranslationX & Y。我将如何从正确的线程调用 setTranslationX & Y?我需要能够不断更新我的表面视图,或者至少在我的玩家移动时更新它。

尝试

mySurfaceView.post(new Runnable() {
    public void run() {
        mySurfaceView.setTranslationX(-player.getX() + GameActivity.GAME_WIDTH/2);
        mySurfaceView.setTranslationY(-player.getY() + GameActivity.GAME_HEIGHT/2);

    }
});

View.post(Runnable)