6

我正在使用默认的 SurfaceView 实现,代码可以在这里找到(这是一个手指绘图应用程序示例,我只是禁用了它并绘制了一个图像)。有3个主要的独立类-

  1. 一个活动类 ( SurfaceViewSampleActivity )
  2. 表面视图(画布视图
  3. 线程类(UIThread)。

SurfaceView 绘制在构造函数中设置的图像(位图)。我还实现了用户可以调用相机应用程序并拍照的功能。图片必须交换默认图像(在 SurfaceView 构造函数设置图像)。

我试图在我的活动类中创建一个简单的方法并设置位图,但这不起作用:

private void setImage() {
    view.bitmap = this.mImageBitmap; 

}

我认为 SurfaceView 线程可能正在使用位图,所以我尝试锁定变量:

private void setImage() {   
    synchronized (view.bitmap) {
        view.bitmap = this.mImageBitmap;
    }   
}

应用程序也崩溃。

SurfaceView 绘制方法:

protected void onDraw(Canvas canvas) {
    setPaintProperties();

    if (canvas != null) {
        canvas.drawColor(Color.WHITE);

        synchronized ( this.bitmap ) {
            canvas.drawBitmap(this.bitmap, 0, 0, new Paint() );
        }

    }
}

调用构造函数后,有什么方法可以更改 SurfaceView 中的位图变量?

4

1 回答 1

1

你的运行方法是什么样的。我会看一下月球着陆器的样本。您需要锁定和解锁画布。

    @Override
    public void run() {
        while (mRun) {
            Canvas c = null;
            try {
                c = mSurfaceHolder.lockCanvas(null);
                synchronized (mSurfaceHolder) {
                    if (mMode == STATE_RUNNING) updatePhysics();
                    doDraw(c);
                }
            } finally {
                // do this in a finally so that if an exception is thrown
                // during the above, we don't leave the Surface in an
                // inconsistent state
                if (c != null) {
                    mSurfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }
    }
于 2013-01-25T19:22:12.750 回答