您的位置:首页 > 移动开发 > Android开发

Android TextureView简易教程

2015-09-28 13:54 411 查看
如果你想显示一段在线视频或者任意的数据流比如视频或者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
implements
SurfaceTextureListener
接口因此activity中需要重写如下方法:

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

除了上面的方法之外,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);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: