gpt4 book ai didi

android - 如何在 SurfaceView 中动态改变图像?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:33 25 4
gpt4 key购买 nike

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

  1. 一个 Activity 类(SurfaceViewSampleActivity)
  2. 表面 View ( Canvas View )
  3. 线程类(UIThread)。

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

我试图在我的 Activity 类中创建一个简单的方法并设置位图,但这没有用:

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 中的位图变量?

最佳答案

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

    @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);
}
}
}
}

关于android - 如何在 SurfaceView 中动态改变图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14501405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com