Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-SurfaceView。在不清除屏幕的情况下更新。(注:我是Noob)_Java_Android_Surfaceview_Surfaceholder - Fatal编程技术网

Java Android-SurfaceView。在不清除屏幕的情况下更新。(注:我是Noob)

Java Android-SurfaceView。在不清除屏幕的情况下更新。(注:我是Noob),java,android,surfaceview,surfaceholder,Java,Android,Surfaceview,Surfaceholder,我在尝试使用SurfaceView时遇到了一个奇怪的问题。就像,它可以工作,但它在两帧之间保持闪烁*。另外,解锁CanvasandPost大约需要30-50毫秒,这正常吗 每次重画都不是一个好主意在这种情况下,我不认为每帧重画350点是一个好主意 *在两帧之间闪烁:假设我在(X,X)处每帧绘制一个点,X是帧编号。 我会看到点1,13,35,57,79,9出现在每一帧上,点2,24,46,68,8出现在每一对帧上 以下是绘制的代码: Canvas C; while(running)

我在尝试使用SurfaceView时遇到了一个奇怪的问题。就像,它可以工作,但它在两帧之间保持闪烁*。另外,解锁CanvasandPost大约需要30-50毫秒,这正常吗

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

*在两帧之间闪烁:假设我在(X,X)处每帧绘制一个点,X是帧编号。 我会看到点1,13,35,57,79,9出现在每一帧上,点2,24,46,68,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有两个缓冲区,每帧交换一次,这意味着您的代码完全可以正常工作


如果您不想重画所有点,您需要首先使用其画布绘制到bimap中,或者在surfaceview中每帧绘制两个点。surfaceview有两个缓冲区,每帧交换两个缓冲区,这意味着您的代码完全可以正常工作


如果您不想重新绘制所有点,您需要先使用其画布绘制到bimap中,或者在surfaceview中每帧绘制两个点。

现在有时间做了,太棒了,谢谢。它工作得非常好。太好了…,至于速度,通常android设备每秒至少可以运行60帧,大约16毫秒。我看不出除了sleep()之外,你的代码应该很慢的原因,除非你在模拟器上运行它,或者你的paint P很复杂,并且使用了一些位图纹理类型的填充。现在找到时间来做了,太棒了,谢谢。它工作得非常好。太好了…,至于速度,通常android设备每秒至少可以运行60帧,大约16毫秒。除了sleep()之外,我看不出代码速度慢的原因,除非您在模拟器上运行它,或者您的paintp很复杂,并且使用了一些位图纹理类型的填充。