• SurfaceView、TextureView对比和学习


    一、SurfaceView的使用

      1.SurfaceView的理解:

       普通的View共享一个Window,它根据DecorView找到对应的Windows,Window找到对应的WindowState,WindowState又对应一个Surface,所以所有的view的DecorView会共享一个Surface。SurfaceView就自己会单独有一个属于自己的Surface,然后又可以拿到Canvas对象,这样就可以绘制画面,这也就是为什么它可以在子线程自己单独绘制原因

        

      2. SurfaceView的使用

        surfaceView.getHolder().addCallback(回掉函数里面重写三个生命周期)

      3.SurfaceView 里面有三个生命周期

       SurfaceCreated->SurfaceChang->SurfaceDestoryed三个生命周期,通过getHolder拿到holder,通过holder拿到Canvas对象可以进行绘制,它的一切都是在子线程去执行.

      4.Canvas.drawTestOnPath(....).   ---------->这个参数可以改变绘制文本的所在的位置

      5.SurfaceView双缓冲机制

       双缓冲:在运用时可以理解为:SurfaceView在更新视图时用到了两张Canvas,一张frontCanvas和一张backCanvas,每次实际显示的是frontCanvas,backCanvas存储的是上一次更改前的视图,当使用lockCanvas()获取画布时,得到的实际上是backCanvas而不是正在显示的frontCanvas,之后你在获取到的backCanvas上绘制新视图,再unlockCanvasAndPost(canvas)此视图,那么上传的这张canvas将替换原来的frontCanvas作为新的frontCanvas,原来的frontCanvas将切换到后台作为backCanvas。例如,如果你已经先后两次绘制了视图A和B,那么你再调用lockCanvas()获取视图,获得的将是A而不是正在显示的B,之后你讲重绘的C视图上传,那么C将取代B作为新的frontCanvas显示在SurfaceView上,原来的B则转换为backCanvas。

    二、TextureView的使用

      1.TextureView的理解:

        它可以将内容流直接投影到View,和SurfaceView不同,它不会在WMS中单独创建窗口,而是作为View hierachy中的一个普通View,因此可以和其它普通View一样进行移动,旋转,缩放,动画等变化。值得注意的是TextureView必须在硬件加速的窗口中,它显示的内容流数据可以来自App进程或是远端进程

      2.使用

       //创建textureListener对象

         textureView.setSurfaceTextureListener(textureListener); 

       onSurfaceTextureAvailable(初始化数据)、onSurfaceTextureSizeChanged(SurfaceView的尺寸改变)、onSurfaceTextureDestroyed(SurfaceView的销毁)

       onSurfaceTextureUpdated(数据的更新)

    三、SurfaceView、TextureView的区别

      1.SurfaceView的优缺点:

       优点:可以在一个独立的线程中进行绘制,不会影响主线程,使用双缓冲机制,播放视频时画面更流畅

       缺点:Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中。SurfaceView 不能嵌套使用

      2.TextureView的优缺点

             优点:支持移动、旋转、缩放等动画,支持截图

             缺点:必须在硬件加速的窗口中使用,占用内存比SurfaceView高,在5.0以前在主线程渲染,5.0以后有单独的渲染线程。

       

     
     
     
     

      

  • 相关阅读:
    js数组从小到大排序
    高效率去掉js数组中重复项
    Oracle start with.connect by prior子句实现递归查询
    ofbiz进击 。 ofbiz 退货流程(包含获取可退货项流程分析 以及 取消退货项的过程分析)
    ofbiz进击 个人遇到的奇葩问题汇总。
    ofbiz进击 第六节。 --OFBiz配置之[widget.properties] 配置属性的分析
    ofbiz进击 第五节。 --OFBiz配置之[general.properties] 共有属性的分析(含email)
    ofbiz进击 第四节。 我的form之旅
    &nbsp|&quot|&amp|&lt|&gt等html字符转义
    ofbiz进击 第三节。 各个关键文件的说明与作用
  • 原文地址:https://www.cnblogs.com/liunx1109/p/13236271.html
Copyright © 2020-2023  润新知