安卓——SurfaceView。在不清除屏幕的情况下更新。 (注:我是菜鸟)
Posted
技术标签:
【中文标题】安卓——SurfaceView。在不清除屏幕的情况下更新。 (注:我是菜鸟)【英文标题】:Android - SurfaceView. Updating WITHOUT clearing the screen. (Note: I'm a Noob) 【发布时间】:2011-11-02 03:14:49 【问题描述】:我在尝试使用 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)
【问题讨论】:
【参考方案1】:SurfaceView 有两个缓冲区,每帧交换一次,这意味着您的代码可以完全按照应有的方式工作。
如果您不想重绘所有点,则需要先使用其画布绘制到 bimap 中,或者在前一帧和当前帧中绘制两个点到表面视图中。
【讨论】:
现在有时间去做,太棒了,谢谢。真的很好用。 太棒了...,至于速度,通常安卓设备至少可以做到每秒60帧,大约是16Ms。除了你的 sleep() 之外,我看不出你的代码应该很慢的原因,除非你在模拟器上运行它或者你的绘画 P 很复杂并且使用了一些位图纹理类型的填充。以上是关于安卓——SurfaceView。在不清除屏幕的情况下更新。 (注:我是菜鸟)的主要内容,如果未能解决你的问题,请参考以下文章