java - Android - 表面 View 。在不清除屏幕的情况下更新。 (注意 : I'm a Noob)

标签 java android surfaceview surfaceholder

我在尝试使用 SurfaceView 时遇到了一个奇怪的问题。喜欢this one , 它有效,但它在 2 帧*之间不断闪烁。另外,unlockCanvasAndPost 大约需要 30-50Ms,这正常吗?

在这种情况下,每次重绘一切都不是一个好主意,我认为每帧重绘 350 个点不是一个好主意。

*两帧之间的闪烁:假设我每帧在 (X,X) 处画一个点,X 是帧编号。 我会看到点 1,1 3,3 5,5 7,7 9,9 出现在每个受损帧中,点 2,2 4,4 6,6 8,8 出现在每个对帧中。

这是绘制的代码:

   Canvas C;
   while(running)
   {

       synchronized (mSurfaceHolder) 
       {
       DoCalc(); //Doesn't do anything special. changes vars X1 and Y1
       C=mSurfaceHolder.lockCanvas();
       aDraw(C); // Only contains canvas.drawRect(X1-1, Y1-1, X1+1,Y1+1, P);
       mSurfaceHolder.unlockCanvasAndPost(C); //Why does it take so long?
       }

    try {Thread.sleep(500);} //Temporary delay. 
    catch (InterruptedException e) {}
   }

最佳答案

SurfaceView 有两个缓冲区,每帧都会交换这两个缓冲区,这意味着您的代码可以正常工作。

如果您不想重绘所有点,您需要首先使用其 Canvas 将其绘制到双图中,或者将每帧前一帧和当前帧绘制两个点到表面 View 中。

关于java - Android - 表面 View 。在不清除屏幕的情况下更新。 (注意 : I'm a Noob),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164565/

相关文章:

java - 系统架构

java - 如何从 dataSnapshot 中获取值?

Android SparseArray<SparseArray<Object>> 初始化

Android 在运行时将按钮放在 surfaceview 上以捕获图像

Android - SurfaceView(宽度,高度)问题

java - 如何使用 maven 和 testng 在所有浏览器中运行特定测试?

java - 如果您决定重命名类中的字段,如何读取旧的 json 字符串(使用 gson)

android - 如何在 SurfaceView 上实现项目触摸

java - GrantedAuthorityImpl() 类的替代方案

android - 从 Chrome 网页调用 Android Intent.ACTION_INSERT