Java画布弹,弹出窗口和surfaceview就可以了 . 画布为空

在Android应用中尝试创建一个包含SurfaceView的弹窗时遇到问题,导致canvas在ThreadView中变为null并抛出异常。错误日志显示SurfaceHolder在锁定表面时出现IllegalArgumentException。问题可能与Surface的生命周期管理和线程同步有关。
摘要由CSDN通过智能技术生成

我创建一些弹出窗口并在其上绘制我的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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值