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

标签 java android draw surfaceview

我正在使用 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/

相关文章:

java - 不幸的是应用程序已停止 Android 模拟器

android - 添加 jar 库和包含库的 src 之间的安全差异

java - Admob 广告未在我的应用中显示

android - 编辑通知对象?

java - libGDX 用线连接两个 Actor

java - 如何使java形状以圆形动画?

java - 动态添加 JPanel 时大小计算错误

java - java 中的 mapreduce - gzip 输入文件

java - 如何从静态上下文初始化重绘计时器?

iOS 8 + Swift - 寻求定义多个车道,但根据事件绘制它们