0

1 つのスレッドを使用する描画プログラムのスケルトンがあります。

    @Override
public void surfaceCreated( SurfaceHolder holder) {
    pajeuThread = new PageThread( holder);
    pajeuThread.setRunning(true);
    Log.v(TAG, "surfaceCreated"  );
    pajeuThread.start();
} // end method surfaceCreated

次に、ページの中央近くに「Hello World」と書き、ページの左側に次のように 30 ずつ増加する数字も書きます。

public void dessineArbre( Canvas canvasse ) {
    compteur += 30;
    if ( compteur > 500 ) compteur = 30;
    screenWidth = getWidth();
    screenHeight = getHeight();
    Log.v(TAG, "dessineArbre"  );
    pagePaint.setColor( Color.WHITE);
    canvasse.drawRect(0, 0, screenWidth, screenHeight, pagePaint);
    pagePaint.setColor( Color.GREEN);
    canvasse.drawText( "Hello World", 200, 200, pagePaint);
    canvasse.drawText(Integer.toString( compteur ), 10, compteur, pagePaint);
} // end method dessineArbre

2本目の糸で描​​いた数字をお願いします。

Thread は、内部クラスによって次のように処理されます。

        private class PageThread extends Thread {
    private SurfaceHolder surfaceHoldere;
    private boolean threadIsRunning = true;

    public PageThread( SurfaceHolder holdere){
        surfaceHoldere = holdere;
        setName( "page thread");
    } // end constructor

    public void setRunning( boolean runninge)   {
        threadIsRunning = runninge;
    } // end setRunning

    @Override
    public void run() {
        Canvas canvasvas = null;

        while( threadIsRunning ) {
            try {
                canvasvas = surfaceHoldere.lockCanvas(null);

                synchronized( surfaceHoldere) {
                    Log.v(TAG, "PageThread try synchronized"  );
                    dessineArbre( canvasvas);
                }// end synchronized
            } // end try
            finally {
                if( canvasvas != null)
                    Log.v(TAG, "Pagethread finally"  );
                    surfaceHoldere.unlockCanvasAndPost(canvasvas);
            } // end finally
        } // end while
    } // end method run
} // end class Pagethread

このクラス Pagethread の別のオブジェクトを作成するにはどうすればよいですか?

4

1 に答える 1

0

2 番目のスレッドを作成し、それを 1000 ミリ秒スリープさせる方法を見つけました。

    private PageThread pajeuThread;
private PageThread pajeuThread2;
    .
    .
@Override
public void surfaceCreated( SurfaceHolder holder) {
    pajeuThread = new PageThread( holder);
    pajeuThread.setRunning(true);
    pajeuThread2 = new PageThread( holder);
    pajeuThread2.setRunning(true);
    Log.v(TAG, "surfaceCreated"  );
    pajeuThread.start();
} // end method surfaceCreated

(私は pajeuThread2 を start() しませんでしたが、とにかく動作します。)

public void dessineArbre( Canvas canvasse ) {
    screenWidth = getWidth();
    screenHeight = getHeight();
    Log.v(TAG, "dessineArbre"  );
    pagePaint.setColor( Color.WHITE);
    canvasse.drawRect(0, 0, screenWidth, screenHeight, pagePaint);
    pagePaint.setColor( Color.GREEN);
    canvasse.drawText( "Hello World", 200, 200, pagePaint);
} // end method dessineArbre

public void drawCounter( Canvas canvassed ) {
    compteur += 30;
    if ( compteur > 500 ) compteur = 30;
    Log.v(TAG, "drawCounter"  );
    pagePaint.setColor( Color.GREEN);
    canvassed.drawText(Integer.toString( compteur ), 10, compteur, pagePaint);
    try{
       pajeuThread2.sleep( 1000);
    }
    catch( InterruptedException e) {
        Log.v(TAG, "drawCounter exception"  );
    }

} // end method drawCounter 

drawCounter メソッドへの呼び出しを追加しました。

    private class PageThread extends Thread {
    private SurfaceHolder surfaceHoldere;
    private boolean threadIsRunning = true;

    public PageThread( SurfaceHolder holdere){
        surfaceHoldere = holdere;
        setName( "page thread");
    } // end constructor

    public void setRunning( boolean runninge)   {
        threadIsRunning = runninge;
    } // end setRunning

    @Override
    public void run() {
        Canvas canvasvas = null;

        while( threadIsRunning ) {
            try {
                canvasvas = surfaceHoldere.lockCanvas(null);

                synchronized( surfaceHoldere) {
                    Log.v(TAG, "PageThread try synchronized"  );
                    dessineArbre( canvasvas);
                    drawCounter( canvasvas );
                }// end synchronized
            } // end try
            finally {
                if( canvasvas != null)
                    Log.v(TAG, "Pagethread finally"  );
                    surfaceHoldere.unlockCanvasAndPost(canvasvas);
            } // end finally
        } // end while
    } // end method run
} // end class Pagethread

これは問題なく動作しますが、これがスレッドを管理する適切な方法であるかどうかはわかりません。

助けてくれて本当にありがとうございます

于 2012-07-17T08:06:58.440 に答える