2

コンテンツビューとしてサーフェスビューを使用してビットマップを描画し、アニメーションを実行するアクティビティがあります。このサーフェスビュースレッド内で次のラウンドのビットマップの新しいセットをロードするための新しいラウンドイベントの開始を制御するための最良の方法は何ですか。ラウンドが完了した後、サーフェスビュースレッドからメインのゲームアクティビティに戻るための最良の方法です。これまでに試したことは、すべてが描画されるsurfaceviewクラスのスニペットです。

              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);
                        }});


            }
4

1 に答える 1

2

あなたはこれをすべきではありません:

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");
            }
        }
}

そして、アクティビティ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

于 2012-11-19T13:43:40.440 に答える