Android:布尔值无法正常工作 - 奇怪

时间:2013-02-28 18:35:56

标签: java android bitmap boolean surfaceview

我正在构建一个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() {...
    }

}

1 个答案:

答案 0 :(得分:0)

我遇到了布尔和"如果"过去的陈述,处理它的最好方法是更明确地与它们对比,例如:

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

干杯!
麦克