当前位置: 代码迷 >> Android >> SurfaceView屏幕闪烁与双缓冲,该怎么处理
  详细解决方案

SurfaceView屏幕闪烁与双缓冲,该怎么处理

热度:111   发布时间:2016-05-01 22:22:26.0
SurfaceView屏幕闪烁与双缓冲
synchronized (mSurfaceHolder) {
  mCanvas=mSurfaceHolder.lockCanvas();
  if(xx)
// drawPend(mCanvas);
  mSurfaceHolder.unlockCanvasAndPost(mCanvas);


开始时,正常画。一段时间后,xx变化,标有“//”的那一行会不执行,屏幕的图案就会闪烁。


什么情况?

此问题确实出现了,已经一下午了。大家帮忙。。。

------解决方案--------------------
我知道答案 具体你要看看这个帖子
http://topic.csdn.net/u/20110718/15/ee90be7b-7be2-424f-a6ac-53225a274abe.html?18577
------解决方案--------------------
主要是SurfaceView的frontbuffer和backbuffer没处理好
------解决方案--------------------
[Quote=引用:]

引用:

主要是SurfaceView的frontbuffer和backbuffer没处理好


明白了是什么问题。


怎么解决呢?那个贴上的没看懂。

[code=Java][/code] //加缓冲
private Paint[] paints=new Paint[2];
private Pa……
[/Quote]

这个是那个例子的解决方法,保证更新一个buffer时另外一个Buffer也要更新。
你这里lockCanvas然后unlockCanvasAndPost相当于两个buffer交替了一次,同时两个buffer的内容不一样就造成闪屏了,既然不用刷屏了怎么不把if提上来,或在条件最后试两个buffer相同。
synchronized (mSurfaceHolder) {
 if(xx)
 {
mCanvas=mSurfaceHolder.lockCanvas();
drawPend(mCanvas);
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
 }






------解决方案--------------------
探讨
你的在最后使两个buffer相同,怎么做?能获得两个buffer吗?

------解决方案--------------------
不是的,那个例子是没清屏的, 看你上个帖子的mDraw
Java code
public void mDraw(Canvas canvas) {mPaint=new Paint();mPaint.setColor(Color.WHITE);canvas.drawRect(0, 0, 480, 320, mPaint);//清屏Bitmap bm0=Bitmap.createBitmap(logo, 0, 50, 256, 100);Bitmap bm1=Bitmap.createBitmap(logo, 0, 200, 256, 50);canvas.drawBitmap(bm0, mainActivity.screenWidth/2-bm0.getWidth()/2, mainActivity.screenHight/2-bm0.getHeight()/2, mPaint);//一张背景图canvas.drawBitmap(bm1, tx, 135, mPaint);//一张移动图,最后就是这张图片来回的动。。。}