Android TextureView简易教程
2015-09-28 13:54
411 查看
如果你想显示一段在线视频或者任意的数据流比如视频或者OpenGL 场景,你可以用android中的TextureView做到。
TextureView的兄弟SurfaceView
应用程序的视频或者opengl内容往往是显示在一个特别的UI控件中:SurfaceView。SurfaceView的工作方式是创建一个置于应用窗口之后的新窗口。这种方式的效率非常高,因为SurfaceView窗口刷新的时候不需要重绘应用程序的窗口(android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率非常低下,不过满足普通应用界面的需求还是绰绰有余),但是SurfaceView也有一些非常不便的限制。
因为SurfaceView的内容不在应用窗口上,所以不能使用变换(平移、缩放、旋转等)。也难以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如
为了解决这个问题 Android 4.0中引入了TextureView。
TextureView
与SurfaceView相比,TextureView并没有创建一个单独的Surface用来绘制,这使得它可以像一般的View一样执行一些变换操作,设置透明度等。另外,Textureview必须在硬件加速开启的窗口中。
TextureView的使用非常简单,你唯一要做的就是获取用于渲染内容的SurfaceTexture。具体做法是先创建TextureView对象,然后实现SurfaceTextureListener接口,代码如下:
Activity
TextureView可以使用setAlpha和setRotation方法达到改变透明度和旋转的效果。
除了上面的方法之外,TextureView 还有如下方法:
例子
下面的例子演示了如何使用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);
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接口,代码如下:
implements了
SurfaceTextureListener接口因此activity中需要重写如下方法:
序号 | 方法&描述 |
---|---|
1 | getSurfaceTexture() This method returns the SurfaceTexture used by this view. |
2 | getBitmap(int width, int height) This method returns Returns a Bitmap representation of the content of the associated surface texture. |
3 | getTransform(Matrix transform) This method returns the transform associated with this texture view. |
4 | isOpaque() This method indicates whether this View is opaque. |
5 | lockCanvas() This method start editing the pixels in the surface |
6 | setOpaque(boolean opaque) This method indicates whether the content of this TextureView is opaque. |
7 | setTransform(Matrix transform) This method sets the transform to associate with this texture view. |
8 | unlockCanvasAndPost(Canvas canvas) This method finish editing pixels in the surface. |
下面的例子演示了如何使用TextureView类,我们创建了一个可以在TextureView中预览Camera的demo,可以改变它的角度以及方向。当然程序需要运行在有摄像头的设备上。
下面是MainActivity.java中的代码:
myTexture.setAlpha(0.5f);
myTexture.setRotation(45.0f);
myTexture.setAlpha(1.5f);
myTexture.setRotation(45.0f);
myTexture.setAlpha(1.0f);
myTexture.setRotation(90.0f);
相关文章推荐
- android string.xml 格式(空格 回车等)
- 【小知识点总结】保存android日志logcat到文件中
- Android中xml实现效果一:xml画圆形
- Android获取系统时间
- Android实现复制粘贴
- 如何使Android应用程序获取系统权限
- Android隐藏虚拟按键(底部导航栏)
- canvas的save()和restore()运用
- Error : Android Studio 找不到模拟器
- Android 建立View 圆角
- 控件点击变样,离开后控件还原
- Android NotificationManager 和Notification的使用总结 转
- 允许Android对于飞行模拟器
- Android KeyCode列表
- android中全屏或取消标题栏
- Android 个人开发者接入支付功能
- Android 上下文菜单与上下文操作模式
- Android中自定义圆形图片的CircleImageView和RoundedImageView基本使用效果
- android 像素转换
- AndroidStudio集成Git(图文并茂)