【问题标题】:Switching from surfaceview to main activity class从表面视图切换到主要活动类
【发布时间】:2012-11-18 23:28:54
【问题描述】:

我有一个活动,它使用表面视图作为其内容视图来绘制一些位图并执行动画,控制开始新一轮事件以在该表面视图中为下一轮加载一组新位图的最佳方法是什么线程或从surfaceview线程切换回主游戏活动的最佳方式是在一轮完成后。到目前为止我已经尝试过,下面是一个来自surfaceview类的sn-p,所有东西都被绘制出来了。

              if(isCollided(i)){

            if(imgList.indexOf(imgList.get(i)) == 0){

                    activity.runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(context, "Correct!", Toast.LENGTH_SHORT).show();
                            Intent i = new Intent(context, AnimeAction.class);
                            context.startActivity(i);
                        }});


            }

【问题讨论】:

  • 你不想使用 new Intent(this,main_activity)??
  • 我当然试过了,但之后导致崩溃,感谢您的回复
  • logcat 中的错误是什么?你能把它和代码一起粘贴到你的帖子中吗?
  • 这是意外的空异常指针,我在调用新意图后也使用了完成
  • 用 sn-p 编辑了主要问题

标签: java android android-intent surfaceview


【解决方案1】:

你不应该这样做:

MainActivity activity = new MainActivity();

试试这个:

MainActivity activity = MainActivity.this;


就发布一组新的位图而言,我在我的应用程序中这样做了:

public class OurView extends SurfaceView implements Runnable
    {
        Thread t=null;
        SurfaceHolder holder;
        boolean ok;

        public OurView(Context context)
        {
            super(context);
            holder=getHolder();

        }
        public void run()
        {
                  //draw the bitmaps
                } 
            public void pause()
        {
            ok=false;
            Log.v("pause()", "ok=false");
            while(true)
            {
                try{

                    t.join();

                }
                catch(InterruptedException e)
                {
                    Log.v("pause()",e.toString());
                }

                break;
            }
           t=null;

        }
        public void resume()
        {
            ok=true;
            if(t==null)
            {
             t=new Thread(this);
               t.start();
               Log.v("resume()", "new thread started");
            }
            else
            {
                Log.v("resume()", "new thread not started as t!=null");
            }
        }
}

在 Activity 的 onResume()onCreate() 中:

@Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        Log.v("onPause()", "super.onPause()");
        v.pause();  //V IS AN OBJECT OF THE CLASS OurView

    }
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.v("onResume()", "super.onResume()");
        v.resume();
      }

我是从这个视频中学到的(以及后续的 1.28 -1.33)-http://youtube.com/watch?v=Z2YogvILjvo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多