当前位置: 首页 > 面试题库 >

尝试清除Android SurfaceView / Canvas后闪烁

鞠自明
2023-03-14
问题内容

因此,我尝试使用canvas.drawColor(Color.BLACK)清除Canvas,但如果仅调用一次,则显示闪烁并显示应该由drawColor覆盖的旧图形。

这是我代码的重要部分-

// This method is called by a Thread                
public void update() {
    Canvas canvas = holder.lockCanvas(null);
    if (canvas != null) {
        onDraw(canvas);
    }
    holder.unlockCanvasAndPost(canvas);
}

@Override
protected void onDraw(Canvas canvas) {

    if (toClear) {
        canvas.drawColor(Color.BLACK);

        //if this is not set to change back to false, it does not flicker
        toClear = false;
    }

    //Draw some objects that are moving around
}

public void clearScreen() {     
    // This method is called when the user pressed a button
    toClear = true;
}

在Google搜索一个小贴士之后,我听说了双重缓冲,但是我了解到lockCanvas()和unlockCanvasAndPost()应该为我处理这个问题。这是怎么了?


问题答案:

我想知道这是否与SurfaceView双缓冲有关,并且它们交替每帧。因此,您必须至少清除屏幕两帧。

更改toClear = truetoClear = 2与集

if(toClear > 0) { 
   'drawColor'
   toClear--; 
}


 类似资料:
  • 问题内容: 我正在测试的Web应用程序在删除记录时需要确认。 我创建了一个测试,以输入删除此记录的有效理由。 执行此操作的代码如下: 文本框的XPath如下: 每当运行测试时,都会返回以下异常。 以下是Web应用程序上元素的HTML: 问题答案: 按照该HTML已经共享了与元素 属性 为 删除的原因 是 角 元素,因为你必须发送短信,你必须诱使 WebDriverWait 的 元素可以点击 如下:

  • 我一直在尝试使用LWJGL进入OpenGL,但遇到了一个无法解决的问题。当尝试使用下面的代码绘制三角形时,窗口会正确打开,并开始闪烁一个不一定是预期三角形的形状(有时它会短暂出现,但通常在窗口的一个象限中有矩形)。 我犹豫的部分原因是,通过我在网上阅读各种帖子和文档,OpenGL在最近的记忆中是如何改变的,以使用功能更少而更面向对象的方法(VBOs和GLSL?)用GL4。我的理解正确吗?学习这个新

  • 问题内容: 我已经在项目中编写了一些JUnit测试,这些测试用于在setup方法中填充数据。现在我已经将maven添加到我的项目中,并且我想执行所有来自maven的测试用例,即使用mvn test。现在的问题是,在运行每个测试类之后,不会清除我的数据库。每个类的测试用例运行后,我需要清除HSQLDB。 问题答案: 您可以通过删除架构来清除数据。默认模式称为PUBLIC。如果执行下面的SQL语句,它

  • 有几百几千个对象,全部清除重绘一次不影响性能吗?尤其是在mousemove里面,移动一个对象

  • 问题内容: 我正在做一个数独求解器,为此,我希望我的JTextFields只接受数字123456789中的一个作为有效输入。因此,我将MaskFormatter与JFormattedTextField一起使用。但是,当我通过执行.setText(“”)清除所有TextField时,MaskFormatter不再起作用。清除文本框后,我可以再次在其中写入任何内容。为什么以及如何解决? 我的代码基本上