カメラからの画像を表示するための 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() {...
}
}