SurfaceView以及添加和删除其他视图

时间:2012-07-20 20:28:02

标签: android views surfaceview

我正在努力创建一个基于2D游戏框架的简单游戏,如2011年Apress的书“Mario Zechner的”开始Android游戏“所述。也许这有帮助,也许它没有,但无论如何:

我整场比赛只有一项活动。所有内容都渲染到位图上,然后发送到SurfaceView,发送到SurfaceView的内容将根据游戏的屏幕进行更改。

我想实现一个简单的高分系统,让用户在主菜单屏幕上输入他们的名字到EditView。我已经能够将SurfaceView和EditView与RelativeLayout结合使用,但问题是一旦用户移过主菜单屏幕就摆脱了EditView。

本课程还有很多内容,但这里有一个我认为重要的内容:

    public abstract class AndroidGame extends Activity implements Game{
      public EditText et;
      public RelativeLayout rl;

      public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        et = new EditText(this);
        renderView = new AndroidFastRenderView(this, frameBuffer);

        rl = new RelativeLayout(this);
        rl.addView(renderView);
        rl.addView(et);
        setContentView(rl);
      }
    } 

以上是游戏的唯一活动。 AndroidFastRenderView类扩展了SurfaceView。我遇到的问题是,虽然我需要SurfaceView在整个游戏中持续存在,但我需要EditText只持续一段时间,然后根据触摸事件消失。

我尝试从我的类MainMenuScreen调用RelativeLayout.removeView(et),它负责构造发送到SurfaceView的位图以及侦听触摸事件。但是我得到了一个未被捕获的异常,它说我无法编辑一个线程中定义的视图。

我很抱歉这部小说,但我一直在努力解决这个问题几个小时没有运气。我觉得这是一个非常简单的事情,我只是没有得到。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

嗯......我认为只有UI线程可以添加和删除视图。尝试像这样调用线程:

runOnUiThread(new Runnable(){
    public void run() {
        /* STUFF To do in Thread */
        //Delete the view...
        rl.removeView(et);
}});

希望有所帮助:)