gpt4 book ai didi

java - Android SurfaceHolder.unlockCanvasAndPost()不会引起重绘

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:57 26 4
gpt4 key购买 nike

我正在使用 Android SDK 实现一个相当标准的应用程序,其中涉及使用 SurfaceView、SurfaceHolder、Callback 设置进行绘图。

在我的主线程(UI 线程)中,我没有绘制或处理 SurfaceHolder(或您用它检索的 Canvas )。

在一个单独的线程中,我有以下内容:

Log.i("GAME.DrawThread", "run()");
Log.i("GAME.DrawThread", Thread.currentThread().getName());
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
synchronized(holder) {
Log.i("GAME", "draw():synchronized");
Paint paint = new Paint();
paint.setColor(R.color.draw_color);
canvas.drawColor(R.color.draw_color);
canvas.drawLine(0, 0, 500, 500, paint);
}
} catch (SurfaceHolder.BadSurfaceTypeException e) {
Log.e("GAME", "onDraw(): BadSurfaceTypeException");
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}

这段代码正在执行,没有抛出异常,也没有我能找到的负面影响;然而,unlockCanvasAndPost() 调用永远不会导致 onDraw() 被调用。

换句话说,unlockCanvasAndPost() 不会引起 SurfaceView 的重绘。

有什么可能导致此症状的想法吗?我有丰富的 Java 经验、相当多的 Android 经验和大量的调试经验,无法追踪到这一点。

提前致谢。

最佳答案

事实证明,当使用 SurfaceView 时,您绘制到位于窗口下方的表面。我在 xml 中设置 View 的背景颜色;事实证明,设置窗口的背景颜色,而不是表面。实际上,我使 Window 不透明,这样您就看不到下面的 Surface。

经验教训。

关于java - Android SurfaceHolder.unlockCanvasAndPost()不会引起重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818284/

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