我创建一些弹出窗口并在其上绘制我的surfaceView
`public void Show() {
pw = new PopupWindow();
pw.setFocusable(true);
pw.setOutsideTouchable(true);
pw.setContentView(new MessengerView(this.findSurface().getContext(),
pw, this.text));
pw.setWidth(300);
pw.setHeight(300);
pw.showAtLocation(this.findSurface(), Gravity.CENTER, 0, 0);
}`
holder = getHolder();
viewThread = new ViewThread(this);
holder.addCallback(new Callback() {
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
onSurfaceChanged();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
onSurfaceLoaded();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
viewThread.closeThread();
}
});
enter code here
在ThredView中
`public void run() {
while (running) {
Canvas canvas = null;
try {
// подготовка Canvas-а
canvas = view.getHolder().lockCanvas();
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
synchronized (view.getHolder()) {
view.draw(canvas);
}
} catch (Exception e) {
} finally {
if (canvas != null) {
view.getHolder().unlockCanvasAndPost(canvas);
}
}
}
}`
canvas在此变体中为Null . 当我在活动中使用这个表面时,它可以帮助我解决问题 . 对不起我的英语不好
错误的日志
02-14 00:17:48.632:E / SurfaceHolder(22131):异常锁定表面02-14 00:17:48.632:E / SurfaceHolder(22131):java.lang.IllegalArgumentException 02-14 00:17:48.632:E / SurfaceHolder(22131):在android.view.Surface.lockCanvasNative(Native Method)02-14 00:17:48.632:E / SurfaceHolder(22131):在android.view.Surface.lockCanvas(Surface.java)02-14 00:17:48.632:E / SurfaceHolder(22131):在android.view.SurfaceView $ 4.internalLockCanvas(SurfaceView.java)02-14 00:17:48.632:E / SurfaceHolder(22131):在android.view.SurfaceView $ 4 .lockCanvas(SurfaceView.java)02-14 00:17:48.632:E / SurfaceHolder(22131):at sushi.thread.ViewThread.run(ViewThread.java:39)