我正在构建一个surfaceView类来显示来自摄像头的图像。我花了一段时间才使它工作但是我添加了一些toast,对话框和一些布尔变量来在AnnotateSurface类和Activity类中调试它。我在if语句中使用其中一个来运行线程将图像绘制到曲面(如果它是真的)(这是阻止它工作的原因)。
if(bitmapState){
drawSomething(canvas);
}
我已经让它工作但只是在我发现布尔值bitmapState被重置为false之后。它被初始化为false但我在getBitmap方法之后将其更改为true。这是编辑布尔变量的唯一方法。
setBitmap方法中的toast显示“true”,但是当我从activity类调用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() {...
}
}
答案 0 :(得分:0)
我遇到了布尔和"如果"过去的陈述,处理它的最好方法是更明确地与它们对比,例如:
if (surfaceState == bitmapState && bitmapState == true) {
drawSomething(canvas);
}
干杯!
麦克