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实现跟随手指移动的光标

  • 相关阅读:
    C#调用Matlab程序
    一台电脑,内外网同时使用
    django 表反查
    django 反查
    登录注册
    django forms自带form表单
    django url 中name
    关于django无法加载静态css、js的情况
    django static
    django models,views,urls,settings
  • 原文地址:https://www.cnblogs.com/94xiyang/p/9481931.html
Copyright © 2011-2022 走看看