SurfaceView的用法及注意事项

surfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的surface。我们可以控制这个surface的格式和尺寸。SurfaceView控制这个surface绘制的位置。surface类直接继承Object,对应了一块屏幕缓冲区,每个窗口window对应一个Surface,任何View都是画在Surface上的,传统的view共享一块屏幕缓冲区。
一般在直播或游戏软件等用的较多
surfaceView内部有两个线程:主线程和渲染线程.
                         渲染线程可以在主线程之外的线程中向屏幕上绘图。所以surfaceView可以在子线程内更新UI
这种双线程的设计模式,极大的消耗了CPU内存,为此,SurfaceView可见时才被创建,SurfaceView隐藏时便被销毁,从而达到节约内存的目的。


surfaceView用法
//创建surfaceView对象
private SurfaceView sfv_Show;
//调用SurfaceView的getHolder方法,得到SurfaceView的控制器
SurfaceHolder holder = sfv_Show.getHolder();
//SurfaceHolder添加回调函数,重写该回调函数的onCreate方法和onDestroy方法。
 //实现SurfaceView的状态监听
                holder.addCallback(new SurfaceHolder.Callback() {
                    @Override //SurfaceVIew对象被创建的时候,执行该方法
                    public void surfaceCreated(SurfaceHolder surfaceHolder) {


                    }
                    @Override//SurfaceView被改变时候,执行该方法
                    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2)                                     {


                    }
                    @Override //SurfaceVIew被销毁时,执行该方法
                    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
                        isRun=false;
                    }
                });
//SurfaceView只在surfaceCreated和surfaceDestroyed之间有效,所以要确保渲染线程访问的是合法有效的Surface。










surfaceView可见时才被创建,隐藏时就被销毁


surfaceView 空指针异常
当主界面执行onCreate生命周期时,surfaceView还未被创建,此时如果调用SurfaceView就会报空指针异常
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值