专栏名称: 开发者全社区
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
stormzhang  ·  来自李子柒的压迫感 ·  2 天前  
鸿洋  ·  Android H5页面性能分析策略 ·  4 天前  
51好读  ›  专栏  ›  开发者全社区

你可能不知道的Android SurfaceView的兄弟神奇的TextureView详解

开发者全社区  · 公众号  · android  · 2017-07-12 10:01

正文


热文导读 | 点击标题阅读

recyclerview_helper多功能封装,让你应用RecyclerView更加自如

吊炸天!74款APP完整源码!

Android史上第一震撼榜单—2017年Android百大框架排行榜,附完整项目


如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的TextureView做到。

TextureView的兄弟SurfaceView

应用程序的视频或者opengl内容往往是显示在一个特别的UI控件中:SurfaceView。SurfaceView的工作方式是创建一个置于应用窗口之后的新窗口。这种方式的效率非常高,因为SurfaceView窗口刷新的时候不需要重绘应用程序的窗口(android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率非常低下,不过满足普通应用界面的需求还是绰绰有余),但是SurfaceView也有一些非常不便的限制。

因为SurfaceView的内容不在应用窗口上,所以不能使用变换(平移、缩放、旋转等)。也难以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如View.setAlpha()

为了解决这个问题 Android 4.0中引入了TextureView。

TextureView

与SurfaceView相比,TextureView并没有创建一个单独的Surface用来绘制,这使得它可以像一般的View一样执行一些变换操作,设置透明度等。另外,Textureview必须在硬件加速开启的窗口中。

TextureView的使用非常简单,你唯一要做的就是获取用于渲染内容的SurfaceTexture。具体做法是先创建TextureView对象,然后实现SurfaceTextureListener接口,代码如下:

Activity implementsSurfaceTextureListener接口因此activity中需要重写如下方法:

TextureView可以使用setAlphasetRotation方法达到改变透明度和旋转的效果。

  1. myTexture.setAlpha(1.0f);

  2. myTexture.setRotation(90.0f);

除了上面的方法之外,TextureView 还有如下方法:

序号方法&描述
1getSurfaceTexture()
This method returns the SurfaceTexture used by this view.
2getBitmap(int width, int height)
This method returns Returns a Bitmap representation of the content of the associated surface texture.
3getTransform(Matrix transform)
This method returns the transform associated with this texture view.
4isOpaque()
This method indicates whether this View is opaque.
5lockCanvas()
This method start editing the pixels in the surface
6setOpaque(boolean opaque)
This method indicates whether the content of this TextureView is opaque.
7setTransform(Matrix transform)
This method sets the transform to associate with this texture view.
8unlockCanvasAndPost(Canvas canvas)
This method finish editing pixels in the surface.

例子

下面的例子演示了如何使用TextureView类,我们创建了一个可以在TextureView中预览Camera的demo,可以改变它的角度以及方向。当然程序需要运行在有摄像头的设备上。

下面是MainActivity.java中的代码:

activity_main.xml

AndroidManifest.xml

不同参数下的截图:

myTexture.setAlpha(0.5f);

myTexture.setRotation(45.0f);

myTexture.setAlpha(1.5f);

myTexture.setRotation(45.0f);

myTexture.setAlpha(1.0f);

myTexture.setRotation(90.0f);

源码及Demo下载点击阅读原文

看完本文有收获?请分享给更多人

更多学习资料点击下面的“阅读原文”获取


Java和Android架构

欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。搜索微信公众号:JANiubility。

公众号:JANiubility

推荐文章
stormzhang  ·  来自李子柒的压迫感
2 天前
鸿洋  ·  Android H5页面性能分析策略
4 天前
小众消息  ·  小道通讯 开放订阅
8 年前
手艺门  ·  炊烟起,游子归
7 年前
巨蟹座专属  ·  巨蟹座明日运势【3月9日】
7 年前