我正在使用 Android sdk 实现一个相当标准的应用程序,其中涉及使用 SurfaceView、SurfaceHolder、Callback 设置进行绘图。
在我的主线程(UI 线程)中,我没有绘制或处理 SurfaceHolder(或您用它检索的画布)。
在一个单独的线程中,我有以下内容:
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 时,您会绘制到窗口下方的 Surface。我在xml中设置View的背景颜色;事实证明,它设置的是 Window 的背景颜色,而不是 Surface 的背景颜色。实际上,我使窗口不透明,以便您看不到下面的表面。
学过的知识。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)