请任何人帮助我解释以下内容。
如何正确调用holder.unlockCanvasAndPost(canvas)方法以避免出现“Surface:unlockCanvasAndPost failed, no locked buffer”之类的错误?
我的意思是,有什么方法可以检查画布之前是否已被锁定?
目前,我有:
try{
_surfaceHolder.unlockCanvasAndPost(canvasToUnlock);
}
catch(Throwable t){ }
但我想这是不对的。
提前致谢。
在@njzk2 帖子上回答:
是的。但在我的情况下,我不得不对处理程序说,我用于从不同线程解锁画布,什么时候应该锁定和解锁。我是说:
class MyObject extends Object{
private Canvas canvas = null;
private SurfaceHolder holder = null;
MyObject(SurfaceHolder sh, Canvas cv){
canvas = cv;
holder= sh;
}
public SurfaceHolder getHolder() {return holder;}
public Canvas getCanvas() {return canvas;}
};
private final Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg){
MyObject myObject= (MyObject)msg.obj;
switch(msg.what){
case 1:
Canvas c = myObject.getCanvas();
c = myObject.getHolder().lockCanvas();
break;
case 2:
myObject.getHolder().unlockCanvasAndPost(myObject.getCanvas());
break;
}
};
};
例如,当当前和下一个图像产生淡入/淡出效果时,我可以在主线程中实现双击以立即更改图像,有时会在画布解锁之前强制停止循环。
所以,我需要通过知道它之前是否解锁来防止意外锁定,反之亦然。
再次,提前感谢任何和所有的答复。