SurfaceView设置背景后的无法绘图的解决方案

来源:互联网 发布:.net域名崛起 编辑:程序博客网 时间:2024/06/05 19:59

原本只是想给surfaceview添加一个背景图,在xml属性里set了  android:backgrand 属性后,surfaceview的绘图失效了(其实是被覆盖了)。


网上的普遍解决方案是

  1. sfv.setZOrderOnTop(true);      // 这句不能少  
  2. sfv.getHolder().setFormat(PixelFormat.TRANSPARENT);


虽然能解决问题,但是同时也衍生了新的问题。surfaceview会置于最顶层,采取framelayout布局且与surfaceview处于同一个区域的组件会被遮挡掉。


经过试验,surfaceview第一次被创建时,在回调方法中对其设置背景,可以完全达成目的。示例代码片段如下:

//surface回调surfaceHolder.addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {                Canvas canvas = surfaceHolder.lockCanvas();canvas.drawColor(Color.WHITE);surfaceHolder.unlockCanvasAndPost(canvas);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {             timerTask.cancel();     timerTask = null;}});


1 0
原创粉丝点击