2012-03-10 51 views
2

我正在开发一个使用表面视图来表示UI图形的Android游戏。如果用户触摸特定区域,我需要实施一种方法来启动另一项活动。 为此,我将主要(前景)活动的当前实例传递到表面视图如何从非UI线程开始活动(从表面视图绘制线程)

我可以轻松处理触摸,但无法从接收的实例启动活动。

**>如果我打电话startActivity从

当前活动例外的接收实例方法发生,指出其与非 UI线程**

我是一个呼叫使用扩展到表面视图的类并传递到在其画布上绘制的线程

+0

感谢小伙子们我想通了 我叫runOnUI从类实例,并将其完美作品 – Allahjane 2012-03-10 08:23:18

回答

3

SurfaceView是否在活动中? 如果是这样,使用

runOnUiThread(new Runnable() { 
    public void run() { 
    //startActivity 
    } 
}); 

如果你不是你真的不应该开始其他活动的活动中..

而且SurfaceView设有驿站和postDelayed方法可以是使用上张贴的Runnable UI线程。

post(new Runnable() { 
     public void run() { 
     //startActivity 
     } 

    }); 
+0

在我的应用程序中,表面视图的对象在活动中被实例化,然后对象被传递给活动的setContentView()方法 – Allahjane 2012-03-10 07:27:25

+0

我会认为,如果它不直接在不应该开始其他活动的活动中,它应该将其委托给使用它的活动。我会实现一些界面,从Surfaceview响应某个事件(回调函数)。不过,我必须看到更多的代码才能帮助你。 – 2012-03-10 07:32:00

+0

哪个类runOnUiThread()属于? – Allahjane 2012-03-10 07:51:17

1

我认为你可以做到这一点...

runOnUiThread(new Runnable() { 
        public void run() { 


      // start your activity here 


        } 
       }); 
+0

哪个类runOnUiThread()属于? – Allahjane 2012-03-10 07:51:33

+0

不,线程类中没有这样的方法:( – Allahjane 2012-03-10 08:11:24

1

您可以使用:

// from MySurfaceView/Activity 
Context context = getContext(); 

//EffectingActivity is another activity 
Intent intent = new Intent(context, EffectingActivity.class); 
context.startActivity(intent);