Android开发-SurfaceView

1.SurfaceView拥有一个独立的window和surface,surface对应了一块屏幕缓冲区,它可以在一个独立的线程中绘制

android中View为什么必须在UI线程中绘制,参考资料

https://blog.csdn.net/junhzhan/article/details/50757302

理论上,View可以在任何拥有消息循环的线程中绘制,只在WindowManager在addView在这个线程中执行就可以,android中的View之所以在必须在UI线程中绘制,就是因为正常View在向WindowManager中添加的时候,即addView的时候是在UI线程中进行

2.SurfaceView所对应的window层级在宿主View window的下面,所以SurfaceView可以理解为在宿主View上面挖了一个洞,即将SurfaceView所对应的区域设置为透明,这样才能看见SurfaceView的内容

3.调用getHolder获取一个SurfaceHolder对象,SurfaceHolder对象可以添加一个CallBack,CallBack中有三个回调,分别是surfaceCreate,surfaceChange,surfaceDestory,这三个方法分别对应这底层surface的创建和销毁

4.可以通过SurfaceHolder获取一个Canvas,并且可以在子线程中在Canvas上面进行绘制

5.SurfaceView为什么不能进行旋转透明度设置?

我的理解:SurfaceView并没有真正的添加在了宿主View的View树中,只是相当于在宿主View中挖了一个洞,因此不能平移旋转变化,SurfaceView自己不能平移,但是父布局可以平移,这样surfaceView也会跟着平移

6.SurfaceView与TextureView的区别:

    1.都可以在子线程中绘制

    2.TextureView只能在开启硬件加速的window中使用

    3.TextureView可以进行平移,缩放动画

    4.TextureView不会创建独立的window

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值