纹理视图TestureView-程序员宅基地

技术标签: java  android  

表面视图SurfaceView在使用Camera的一般情况下是够使用了,但是有一些限制。因为表面视图不是通过onDraw方法和 dispatchDraw方法进行绘图,所以无法使用View的基本视图方法;各种视图变化方法均无法奏效,包括透明度变化方法setAlpha、平移方法setTranslation、缩放方法setScale、旋转方法 setRotation等,甚至连最基础的背景图设置方法setBackground都失效了。
为了解决表面视图的不足之处,Android在4.0之后引入了纹理视图TextureView。与表面视图相比,纹理视图并没有创建一个单独的绘图表面用来绘制,可以像普通视图一样执行变换操作,也可以正常设置背景图。

下面是TextureView的常用方法:

lockCanvas:锁定并获取画布。

unlockCanvasAndPost:解锁并刷新画布。

setSurfaceTextureListener: 设置表面纹理的监听器。该方法相当于SurfaceHolder的addCallback方法,用来监控表面纹理的状态变化事件。方法参数为SurfaceTextureListener监听器对象,需重写以下4个方法:

  • onSurfaceTextureAvailable: 在表面纹理可用时触发,可在此进行打开相机等操作
  • onSurfaceTextureSizeChanged:在表面纹理尺寸变化时触发。
  • onSurfaceTextureDestroyed: 在表面纹理销毁时触发。
  • onSurfaceTextureUpdated:在表面纹理更新时触发。

isAvailable:判断表面纹理是否可用。

getSurfaceTexture:获取表面纹理。

//获取纹理视图
TextureView textureView=findViewById(R.id.textureView);
//设置纹理视图监听(相当于表面视图增加回调)
textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
    //纹理视图可用时调用(创建成功时)
    public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surfaceTexture, int i, int i1) {
        //锁定并获取画布
        Canvas canvas=textureView.lockCanvas();
        //创建画笔
        Paint paint=new Paint();
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);
        paint.setStrokeWidth(10);
        paint.setStyle(Paint.Style.STROKE);
        //绘图
        canvas.drawCircle(150,150,50,paint);
        //解锁并刷新画布
        textureView.unlockCanvasAndPost(canvas);
    }
    //纹理视图尺寸变更时调用
    public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surfaceTexture, int i, int i1) {

    }
    //纹理视图销毁时调用
    public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surfaceTexture) {
        return false;
    }
    //纹理视图更新时调用
    public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surfaceTexture) {

    }
});

tag:SurfaceView;表面视图;TextureView;纹理视图;Camera;相机;Canvas

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_57150356/article/details/136448499

智能推荐

入门指南【ML-Agents 官方文档翻译(ML-Agent 1.9.1,Unity 2018-2020)】_拖动3d球模型位于assets/ml-agents/examples/3dball/tfmodels-程序员宅基地

文章浏览阅读4.8k次。Getting Started Guide本指南将讲解在 Unity 中打开其中一个示例工程 ,训练一个Agent,并将训练过的模型嵌入到 Unity 环境中的完整过程。阅读本教程之后,您应该能够训练任何示例环境。如果你不熟悉的 Unity Engine,查看我们的 Background: Unity 章节。此外,如果你不熟悉机器学习,请查看我们的 Background: Machine Learning 页面,以了解简要概述和有用的建议。我们将使用 3D Balance Ball 环境,它包含_拖动3d球模型位于assets/ml-agents/examples/3dball/tfmodels进入model下的财产be

4D毫米波雷达 ti awr2243 天线通道校准方法-程序员宅基地

文章浏览阅读2.8k次,点赞6次,收藏24次。通道之间校准是因为一个主设备和三个从设备之间的频率、相位、振幅不匹配。然后进行距离维度FFT,根据物体大致距离和距离分辨率,得到所在距离维度尖峰所在频点index及其复数值(复数数据),组成12*16的复数矩阵。每一块板子都要生成一个校准矩阵,将雷达原始数据相乘之后,在进行其它功能的开发。ti awr2243使用的是4片级联方案,4个三发四收雷达板,总共12个发射天线16个接收天线,192个虚拟通道。为补偿用的调频斜率;为参考虚拟通道的尖峰索引的复数值;为别的虚拟通道的尖峰索引的复数值;_awr2243

国家税务总局全国增值税发票查验平台网站js逆向分析及全逆向算法还原_“http://inv—veri.chinatax.gov.cn/”-程序员宅基地

文章浏览阅读2.1w次,点赞2次,收藏22次。本文教程针对的事2021年7月2日时国税查验平台的js分析,其中版本号为V2.0.06_009。主要分析内容为key9和flwq39以及fplx这3个参数的算法,其中key9分为获取验证码阶段和查验阶段,算法有所区别,flwq39同理。教程开始:一、官方网址https://inv-veri.chinatax.gov.cn/index.html二、请求分析国税查验平台请求共分为2个,第一个请求获取验证码,第二个请求为输入验证码后查验数据并返回发票详细信息。第一步:安装证书基础:谷歌_“http://inv—veri.chinatax.gov.cn/”

ASM驱动安装与ASM盘建立_asm1166驱动-程序员宅基地

文章浏览阅读3.7k次。ASM驱动安装与ASM盘建立(一)(转自 求道的路上http://space.itpub.net/17203031/viewspace-692538)上一篇 / 下一篇 2011-04-14 20:53:33 / 个人分类:ASM查看( 207 ) / 评论( 3 ) / 评分( 3 / 0 ) 前段时间安装虚拟Linux上的ASM实例,中间反复了几次,不过_asm1166驱动

【Python】(较简单)使用scipy.io.loadmat读取.mat文件中的数据部分-程序员宅基地

文章浏览阅读4.1w次,点赞34次,收藏127次。Python使用Scipy库中的io.loadmat读取.mat文件,并获取数据部分读取方法很简单,只需要使用scipy.io库即可,Python代码入下:import scipy.io as sioyFile = 'y2.mat' #相对路径datay=sio.loadmat(yFile)print datay此时输出的datay是一个字典格式的输出,如下:{‘y’:..._io.loadmat

robotframework 入门 (一)安装、工具ride/pycharm、三种用例模式_pycharm ride-程序员宅基地

文章浏览阅读2.6k次。测试教程网(虫师)http://www.testclass.net/rf/(虫师)Robot Framework自动化测试 ---视频与教程免费分享  电子书下载 《robot framework 自动化测试》 上课视频分享《robot framework上课视频》 最新录制网易云课堂《robot framework自动化测试入门》 最..._pycharm ride

随便推点

Scala Scalatest Maven 单元测试配置(测试报告和覆盖率报告)_scalatest 报告-程序员宅基地

文章浏览阅读5.9k次,点赞4次,收藏6次。第一篇:Scala Scalatest Maven 单元测试配置(测试报告和覆盖率报告)第二篇:Scala Scalatest Maven 集成测试配置环境:Maven: 3.3.9Scala: 2.11.11Scalatest_2.11: 3.0.1这次配置单元测试没有使用Junit,网上很多的测试配置都是基于Junit的,所以查了很久终于找到了一些和scalatest配套..._scalatest 报告

华为笔试:字符串解压缩_字符串解压 华为-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏8次。将一段压缩后的字符串解压缩,并且排序输出解压规则:每个字符串后面跟随一个数字,表示这个字符串的重复次数。例如,“a5"解压后的结果为"aaa;"abc3"解压后的结果为abcabcabc。排序规则1、根据每个字符串的重复次数升序排序,然后输入结果例如,“a3b2”,输出的结果为“ obama2、如果字符重复次数一样,则根据ASC!码顺序做升序排序,然后输出结果。例如,“..._字符串解压 华为

固态继电器_state relay-程序员宅基地

文章浏览阅读355次。如果A点的电压小于M1的过零电压(即VA _state relay

Linux input子系统简述(Linux驱动开发篇)-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏29次。1. 简介input 子系统就是管理输入的子系统,和pinctrl、gpio 子系统一样,都是 Linux 内核针对某一类设备而创建的框架。按键、鼠标、键盘、触摸屏等都属于输入设备,linux内核为此专门做了一个叫做input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了input框架,用户只需要负责上报输入事件,比如按键值、坐标等信息。对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可为此input子系统分为 input驱动层、in_linux input子系统

Activiti7.0实战学习(七):流程定义信息之删除_activiti删除model表还要删除什么表-程序员宅基地

文章浏览阅读2.8k次。背景数据库中要有必要的数据信息。比如流程定义表,流程定义的部署,流程实例的启动。根据ID删除,根据的是act_ru_deployment表的id进行删除的。这个删除操作影响了哪些表中的数据记录呢?流程定义信息的删除,操作的是act_ru_deployment表。是因为我们部署流程定义的信息的时候,其实就是把bpmn中的数据写到数据库中而已。因此,它删除的时候,没有找act_ru_proc..._activiti删除model表还要删除什么表

Centos磁盘空间转移重新分配_centos重新分配磁盘空间-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏19次。重新分配centos磁盘空间,将其中一个挂载点的空间分配给另一个挂载点_centos重新分配磁盘空间