0

この目的を達成するために、アクティビティ内に保持されているSurfaceViewを使用しています。

Surfaceview が実際にキャンバスに何かを描画するために一時停止が必要な場合があります。その後、Vector 内に格納されているいくつかの整数に従って、待機して別のものを Secuencially に描画します。

最初は Thread.sleep() と Systemclock.sleep() を使用してこの一時停止を取得しようとしましたが、スレッドが常にブロックされ、描画メソッドが適切に呼び出されても変更が表示されないため、まったく役に立たないようです。

ここで、スリープ状態のジョブを実行する Asynctask を使用してからフラグを立てることが、物事を成し遂げるための良いアイデアであることがわかりました。

だから私はそれをしましたが、onPostExecuteが呼び出されないように見えるので、私のフラグは決して上がりません...

続行する方法についてのアイデアはありますか?

これは私の最初の Android アプリです。親切に、できるだけ早く答えてください。

どうもありがとう。

一時停止の方法は次のとおりです。

public void pausar(){
    Log.e("pausar", "entro a pausar");
    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            Log.e("pausar", "Empiezo a dormir");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Log.e("pausar", "Acaba el sleep");
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            despierta = true;
            Log.e("pausar", "¡¡¡¡¡¡¡¡¡¡¡¡¡¡DESPIERTO!!!!!!!!!!!");
        }
    };

    if(!llamaPausa){
        task.execute();
        llamaPausa = true;
    }
}

そして、これは一時停止が必要なシーケンス プレーヤー メソッドです。

public void reproducirSecuencia(final Canvas canvas){
    reproduciendo = true;
    //TODO: HACER QUE ESTO FUNCIONE!!
    Log.e("reproducirSecuencia", "Entro a reproducir");

    int i = 0;

    while(i < secuencia.size()){

        Object o = secuencia.elementAt(i);
        int num = 0;
        if (o instanceof Integer) {num = (Integer) o;}

        reproducirSonido(num);
        repId = num;
        onDraw(canvas);

        //Log.e("reproducirSecuencia", "repId = " + repId);
        //Log.e("reproducirSecuencia", "Invoco a pintarPiezas");

        i++;

        if(!despierta){
            pausar();
            Log.e("Repsec", "despierta = " + despierta);
        }
        llamaPausa = true;
        despierta = false;**




        //SystemClock.sleep(1000);
        //try {Thread.sleep(1000);}
        //catch (InterruptedException e) {e.printStackTrace();}
    }
    reproduciendo = false;
}

ログキャットは次のとおりです。

08-18 22:21:54.050 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec

08-18 22:21:54.060 805-904/com.example.simondeluxe E/pausar: entro a pausar

08-18 22:21:54.060 805-904/com.example.simondeluxe E/Repsec: despierta = false

08-18 22:21:54.070 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec

08-18 22:21:54.070 805-904/com.example.simondeluxe E/pausar: entro a pausar

08-18 22:21:54.070 805-904/com.example.simondeluxe E/Repsec: despierta = false

08-18 22:21:54.080 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec

08-18 22:21:54.080 805-904/com.example.simondeluxe E/pausar: entro a pausar

08-18 22:21:54.080 805-904/com.example.simondeluxe E/Repsec: despierta = false

08-18 22:21:54.090 805-904/com.example.simondeluxe E/onDraw: Entro a onDraw desde repsec

08-18 22:21:54.090 805-904/com.example.simondeluxe E/pausar: entro a pausar

08-18 22:21:54.090 805-904/com.example.simondeluxe E/Repsec: despierta = false

4

1 に答える 1