zoukankan      html  css  js  c++  java
  • Android SurfaceView

    SurfaceView

    Surface相当于绘制的容器,所有View和子类都是绘制在这里面。

    SurfaceView是View的子类,将Surface的数据显示出来。

    View适用主动更新视图,不需要频繁刷新。在主线程更新UI,没有双缓冲机制。

    SurfaceView适用于被动更新视图,频繁刷新。通过子线程更新UI,底层实现中就实现了双缓冲机制。

    SurfaceHolder

    SurfaceHolder是Surface的抽象接口,操纵surface的控制器。

    使用SurfaceView的getHolder()方法,获取SurfaceHolder对象

    在SurfaceView使用中需要的几个重要方法:

    void addCallback(SurfaceHolder.Callback var1);
    //为SurfaceHolder添加一个SurfaceHolder.Callback回调接口
    
    void removeCallback(SurfaceHolder.Callback var1);
    //从Surface持有者中删除回调接口
    
    Canvas lockCanvas();
    //获取Canvas对象,并锁定
    
    void unlockCanvasAndPost(Canvas var1);
    //释放同步锁,并显示
    
    void setFormat(int var1);
    //指定surface的像素格式,PixelFormat常量
    
    void setFixedSize(int var1, int var2);
    //固定Surface的宽高
    
    void setKeepScreenOn(boolean var1);
    //false是允许屏幕关闭,true强制屏幕打开状态

    SurfaceHolder.Callback

    实现SurfaceHolder.Callback接口,创建SurfaceView的生命周期,它有三个回调方法:

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        //Surface创建的时候调用
    }
    
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
           //Surface大小被改变的时候调用
    }
    
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        //Surface被销毁的时候调用
    }    

    实现Runnable接口,利用子线程做绘图操作

    绘制方法需要在绘制前调用locakCanvas锁定画布,得到画布。

    绘制完成后需要调用lockCanvasAndPost方法来解锁画布,显示。

     @Override
     public void run() {
           draw();
     }
    
    private void draw() {
       try {
          mCanvas=mHolder.lockCanvas();
              //绘制
    
          }catch (Exception e){
    
          }finally {
                //避免黑屏情况,解锁画布
              if(mCanvas!=null){
                mHolder.unlockCanvasAndPost(mCanvas);
             }
         }
    }

     相关阅读

    SurfaceView开启相机预览

    SurfaceView实现跟随手指移动的光标

  • 相关阅读:
    记录下首次开通流量主,开心开心
    微信小程序之本地缓存
    在使用ef的情况下,有Migrations文件,想要直接生成数据库
    CSS 设置圆角div和阴影效果
    小程序UI库(UI组件)
    没有找到可以构建的 NPM 包---小程序开发
    php 接口参数对象转数组方法
    tp5框架获取随机n条
    php图片上传base64接口上传
    php如何实现定时任务,php定时任务方法,最佳解决方案,php自动任务处理
  • 原文地址:https://www.cnblogs.com/94xiyang/p/9481931.html
Copyright © 2011-2022 走看看