1

カメラからの画像を表示するための surfaceView クラスを作成していました。動作するようになるまで少し時間がかかりましたが、トースト、ダイアログ、ブール変数をいくつか追加して、AnnotateSurface クラスと Activity クラスでデバッグしました。if ステートメントでこれらの 1 つを使用してスレッドを実行し、それが true の場合に表面に画像を描画していました (これが機能を停止していた)。

if(bitmapState){

     drawSomething(canvas);
}

私はそれを機能させましたが、ブール値 bitmapState が false にリセットされていることがわかった後でのみです。false に初期化されていますが、getBitmap メソッドの後で true に変更します。これは、そのブール変数を編集する唯一のメソッドです。

setBitmap メソッドの toast には「true」と表示されますが、アクティビティ クラスから getStuff メソッドを呼び出すと false と表示され、run メソッドの if ステートメントも次のように使用すると機能しません。

if (surfaceState == bitmapState == true) {

    drawSomething(canvas);
}    

他のすべてのブール値が正しく動作しているため、これは非常に紛らわしいです。誰かが何か洞察を持っているなら、私はそれを聞きたいです.

public class AnnotateSurface extends SurfaceView implements Callback, Runnable {

    // create a holder to manage the surface of the view
    SurfaceHolder ourHolder;

    // Create a thread
    Thread ourThread = null;

    // Create a boolean to determine when to stop the animation
    boolean isRunning = false;
    boolean surfaceState = false;
    boolean bitmapState = false;

    public static Bitmap bmpIm = null;

    Context c;

    Canvas canvas;

    int ws, hs;

    public AnnotateSurface(Context context) {...
    }

    public AnnotateSurface(Context context, AttributeSet attrs) {...
    }

    public AnnotateSurface(Context context, AttributeSet attrs, int defStyle) {...
    }

    // create a method to pause the thread
    public void pause() {...

    }


    public void resume() {...
    }

    // create a method to resume the thread
    public void setBitmap(Bitmap b) {

        bmpIm = b;

        // bmpIm = AnnotateImage.bmpAnnotate;
        // isRunning = true;

        bitmapState = true;

        Toast toast = new Toast(c);

        Toast.makeText(c, Boolean.toString(bitmapState), Toast.LENGTH_LONG)
                .show();

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {...
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {...
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        surfaceState = false;
    }

    // @Override
    public void drawSomething(Canvas canvas) {...
    }

    public String getstuff() {

        String Data = "not drawing" + Boolean.toString(this.bitmapState)
                + Boolean.toString(surfaceState) + Boolean.toString(isRunning)
                + Integer.toString(ws) + Integer.toString(hs);

        return Data;

    }

    public Bitmap getstuffImage() {...
    }

    @Override
    public void run() {...
    }

}
4

1 に答える 1

1

私は過去にブール値と「if」ステートメントで問題を抱えていました。これに対処する最善の方法は、それらをより明確にすることです。たとえば、次のようになります。

if (surfaceState == bitmapState && bitmapState == true) {
drawSomething(canvas);
}   

乾杯!
マイク

于 2013-02-28T18:47:07.930 に答える