作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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/
我是一名优秀的程序员,十分优秀!