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

猜你喜欢

转载自blog.csdn.net/qq_19694479/article/details/80254625