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);
}
}
------解决方案--------------------
------解决方案--------------------
不是的,那个例子是没清屏的, 看你上个帖子的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);//一张移动图,最后就是这张图片来回的动。。。}