API 25 (Android 7.1.1 API) view.TextureView
来源:互联网 发布:淘宝网地板棉拖鞋 编辑:程序博客网 时间:2024/05/29 21:18
Android API 25 (Android 7.1.1)
TextureView
public class TextureView
extends View
Added in API level 14
java.lang.Object
↳android.view.View
↳android.view.TextureView
【概述】
TextureView可用于显示内容流。 这样的内容流例如可以是视频或OpenGL场景。 内容流可以来自App进程或是远端进程。
TextureView只能在硬件加速窗口中使用。 当在软件中渲染时,TextureView将不会绘制任何东西。
与SurfaceView不同,TextureView不会创建单独的窗口,这使得它可以像一般的View一样执行一些变换操作,比如移动,转换,动画等。例如,你可以通过调用myView.setAlpha(0.5f)使一个TextureView半透明。
使用TextureView很简单:所有你需要做的是获取它的SurfaceTexture。SurfaceTexture可以用于渲染内容。
应用程序的视频或者opengl内容往往是显示在一个特别的UI控件中:SurfaceView。SurfaceView的工作方式是创建一个置于应用窗口之后的新窗口。这种 方式的效率非常高,因为SurfaceView窗口刷新的时候不需要重绘应用程序的窗口(android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者 是局部的刷新都会导致整个视图结构全部重绘一次,因此效率非常低下,不过满足普通应用界面的需求还是绰绰有余),但是SurfaceView也有一些非常 不便的限制。
因为SurfaceView的内容不在应用窗口上,所以不能使用变换(平移、缩放、旋转等)。也难以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如View.setAlpha()。
以下示例演示如何将相机预览渲染到TextureView中:
public class LiveCameraActivity extends Activity implements TextureView.SurfaceTextureListener {
private Camera mCamera;
private TextureView mTextureView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextureView = new TextureView(this);
mTextureView.setSurfaceTextureListener(this);
setContentView(mTextureView);
}
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mCamera = Camera.open();
try {
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
} catch (IOException ioe) {
// Something bad happened
}
}
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
// Ignored, Camera does all the work for us
}
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.stopPreview();
mCamera.release();
return true;
}
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
// Invoked every time there's a new Camera preview frame
}
}
TextureView的SurfaceTexture可以通过调用getSurfaceTexture()或者使用
TextureView.SurfaceTextureListener获得。 重要的是知道SurfaceTexture只有在TextureView附加到一个窗口(和onAttachedToWindow()被调用后)才可用。因此,强烈建议您使用一个监听器在SurfaceTexture可用时通知。
重要的是要注意,只有一个生产者可以使用TextureView。 例如,如果使用TextureView显示相机预览,则不能同时使用lockCanvas()绘制到TextureView。
【嵌套类】
接口 TextureView.SurfaceTextureListener
当与该纹理视图相关联的表面纹理可用时,可以使用该监听器来通知该监听器。
【继承自view.View的XML属性】
跳转view.View
【公共方法】
buildLayer
void buildLayer ()
API 14
调用此方法没有任何效果。
draw
void draw (Canvas canvas)
API 14
TextureView的子类不能使用Canvas对象进行自己的渲染。
getBitmap
Bitmap getBitmap ()
Bitmap getBitmap (int width, int height)
API 14
返回关联表面纹理的内容的位图表示。如果表面纹理不可用,则此方法返回null。
此方法返回的位图使用ARGB_8888像素格式。
不要从绘图方法(例如onDraw(android.graphics.Canvas))调用此方法。
如果在复制期间发生错误,则将返回空位图。
getBitmap
Bitmap getBitmap (Bitmap bitmap)
API 14
将此视图的表面纹理的内容复制到指定的位图中。如果表面纹理不可用,则不执行复制。表面纹理的内容将被缩放以适合在指定的位图内。
getLayerType
int getLayerType ()
API 14
始终返回LAYER_TYPE_HARDWARE。
getSurfaceTexture
SurfaceTexture getSurfaceTexture ()
API 14
返回此视图使用的SurfaceTexture。 如果视图未附加到窗口或如果表面纹理尚未初始化,则此方法可能返回null。
getSurfaceTextureListener
TextureView.SurfaceTextureListener getSurfaceTextureListener ()
API 14
返回当前与此纹理视图相关联的TextureView.SurfaceTextureListener。
getTransform
Matrix getTransform (Matrix transform)
API 14
返回与此纹理视图关联的变换。
isAvailable
boolean isAvailable ()
API 14
如果与此TextureView关联的SurfaceTexture可用于渲染,则返回true。 当此方法返回true时,getSurfaceTexture()返回有效的表面纹理。
isOpaque
boolean isOpaque ()
API 14
指示此视图是否不透明。不透明视图确保它将使用完全不透明的颜色绘制重叠其边界的所有像素。视图的子类应该尽可能覆盖此方法以指示实例是否不透明。不透明视图由View层次结构以特殊方式处理,可能允许它在无效/绘制通过期间执行优化。
lockCanvas
Canvas lockCanvas ()
API 14
开始编辑曲面中的像素。返回的Canvas可以用来绘制表面的位图。 如果表面尚未创建或无法编辑,则返回null。 你通常需要实现onSurfaceTextureAvailable(android.graphics.SurfaceTexture,int,int)来找出Surface是否可以使用。
Surface的内容永远不会保留在unlockCanvas()和lockCanvas()之间,因此,Surface区域中的每个像素都必须写入。 此规则的唯一例外是当指定一个脏矩形时,在这种情况下,将保留非脏像素。
仅当基础表面尚未由另一个生产者拥有时,才能使用此方法。例如,如果TextureView用于渲染相机的预览,则无法调用此方法。
lockCanvas
Canvas lockCanvas (Rect dirty)
API 14
就像lockCanvas(),但允许指定一个脏矩形。 该矩形内的每个像素都必须写入;但是脏矩形外部的像素将被下一次调用lockCanvas()保留。 如果底层表面纹理不可用,则此方法可返回null(请参阅isAvailable()或如果表面纹理已连接到图像制作者(例如:相机,OpenGL,媒体播放器等)
setBackgroundDrawable
void setBackgroundDrawable (Drawable background)
API 14——23
使用 setBackground(Drawable)代替。
setForeground
void setForeground (Drawable foreground)
API 23
提供要在视图中的所有内容之上渲染的Drawable。
SetLayerPaint
void setLayerPaint (Paint paint)
API 17
更新与当前图层一起使用的Paint对象(仅当当前图层类型未设置为LAYER_TYPE_NONE时使用)。 下一次重绘视图时,将使用提供给setLayerType(int,android.graphics.Paint)的Paint的更改属性,但必须调用setLayerPaint(android.graphics.Paint)以确保立即重绘视图。
图层与一个可选的Paint实例相关联,该实例控制图层在屏幕上的组成方式。 在构成层时,考虑涂料的以下性能:
半透明(alpha)
混合模式
彩色滤光片
如果此视图通过调用setAlpha(float)将alpha值设置为<1.0,则图层的颜色的alpha值将被此视图的alpha值替代。
setLayerType
void setLayerType (int layerType, Paint paint)
API 14
TextureView的图层类型被忽略,因为TextureView总是被视为硬件层。 然而,在渲染此TextureView的内容时,将会考虑提供给此方法的可选涂料。
setOpaque
void setOpaque (boolean opaque)
API 14
指示此TextureView的内容是否不透明。 默认情况下,内容假定为不透明。
setSurfaceTexture
void setSurfaceTexture (SurfaceTexture surfaceTexture)
API 16
设置要使用的视图的SurfaceTexture。 如果此视图已经使用了SurfaceTexture,它将立即释放并且不再可用。onSurfaceTextureDestroyed(SurfaceTexture)回调不会为上一个SurfaceTexture调用。 类似地,onSurfaceTextureAvailable(SurfaceTexture,int,int)回调函数不会调用传递给setSurfaceTexture的SurfaceTexture。 在调用此方法之前,SurfaceTexture对象必须与所有OpenGL ES上下文分离。
setSurfaceTextureListener
void setSurfaceTextureListener (TextureView.SurfaceTextureListener listener)
API 14
设置用于监听表面纹理事件的TextureView.SurfaceTextureListener。
setTransform
void setTransform (Matrix transform)
API 14
将变换设置为与此纹理视图相关联。指定的变换适用于底层表面纹理,并且不影响视图本身的大小或位置,仅影响其内容。
某些变换可能会阻止内容绘制此视图边界内包含的所有像素。在这种情况下,请确保此纹理视图未标记为不透明。
unlockCanvasAndPost
void unlockCanvasAndPost (Canvas canvas)
API 14
完成编辑曲面中的像素。调用后,表面的当前像素将显示在屏幕上,但其内容丢失,特别是不能保证Surface的内容将保持不变,当lockCanvas()被再次调用。
- API 25 (Android 7.1.1 API) view.TextureView
- API 25 (Android 7.1.1 API) view.SurfaceView
- API 25 (Android 7.1.1 API) view.ViewStub
- API 25 (Android 7.1.1 API) view.ViewGroup——属性分析
- API 25 (Android 7.1.1 API) Manifest
- android.view.WindowManager API
- Android View api 详解
- Android View api
- Android API之android.view.View.MeasureSpec
- 【Android API简述】android.view.View.OnClickListener
- Android API的View类
- Android API Guides---Grid View
- Android API Guides---View Animation
- API 25 (Android 7.1.1 API) widget.Space
- API 25 (Android 7.1.1 API) widget.AbsoluteLayout
- API 25 (Android 7.1.1 API) widget.RelativeLayout
- API 25 (Android 7.1.1 API) widget.FrameLayout
- API 25 (Android 7.1.1 API) widget.AdapterView
- ACM篇:POJ 1786--Bridge Hands
- activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含
- go 打印当前时间
- shareSDK
- 2.非模态对话框的创建
- API 25 (Android 7.1.1 API) view.TextureView
- ionic 套接字只允许一次
- java 实现Leetcode Container With Most Water
- Fiddler抓包配置
- java 回调函数同步、异步调用
- HA下安装HBase
- [转]如何提升你的能力?给年轻程序员的几条建议
- 访问者模式
- java 解决Leetcode Integer and Roman 问题