SurfaceView叠加展示

SurfaceView叠加展示

项目背景

  最近集成网易云信的视频通讯SDK,碰到了一个问题。
  画面展示用的是云信封装的SurfaceView,直接在布局中使用。结果绘制画面的时候总是出现覆盖问题。
  PS:本地画面小窗展示(覆盖在远端界面之上),远端画面全屏展示。绘制远端画面的时候,本地小窗直接被覆盖。

解决方案

  谷歌了一下“SurfaceView叠加”关键字。很多资料都提到了SurfaceView的setZOrderMediaOverlay(boolean isMediaOverlay)方法。于是去源码中看了一下关于这个方法的描述:
* Control whether the surface view’s surface is placed on top of another
* regular surface view in the window (but still behind the window itself).
* This is typically used to place overlays on top of an underlying media
* surface view.
*
*

Note that this must be set before the surface view’s containing
* window is attached to the window manager.
*
*

Calling this overrides any previous call to {@link #setZOrderOnTop}.

大概翻译一下就是࿱

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 SurfaceView展示 Bitmap,需要遵循以下步骤: 1. 获取 SurfaceHolder 对象,通过 SurfaceView.getHolder() 方法获取。 2. 在 SurfaceHolder.Callback 中的 surfaceCreated() 方法中,获取 Canvas 对象。 3. 在 Canvas 上绘制 Bitmap,可以使用 Canvas.drawBitmap() 方法。 4. 在 SurfaceHolder.Callback 中的 surfaceChanged() 方法中,设置 SurfaceView 的尺寸和格式。 5. 在 SurfaceHolder.Callback 中的 surfaceDestroyed() 方法中,释放资源。 下面是一个简单的代码示例: ``` public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mSurfaceHolder; private Bitmap mBitmap; public MySurfaceView(Context context) { super(context); mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image); } @Override public void surfaceCreated(SurfaceHolder holder) { Canvas canvas = holder.lockCanvas(); canvas.drawBitmap(mBitmap, 0, 0, null); holder.unlockCanvasAndPost(canvas); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO: 设置 SurfaceView 的尺寸和格式 } @Override public void surfaceDestroyed(SurfaceHolder holder) { mBitmap.recycle(); } } ``` 这个例子中,我们在 SurfaceView 的构造方法中加载了一张图片,然后在 SurfaceHolder.Callback 的 surfaceCreated() 方法中将图片绘制到 Canvas 上,并通过 SurfaceHolder.unlockCanvasAndPost() 方法提交绘制结果。在 surfaceDestroyed() 方法中释放图片资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值