android textureview用法
TextureView 是 Android 中用于显示视频或相机预览的一个强大控件。相比于 SurfaceViewTextureView 提供更灵活的绘制和变换能力。以下是关于 TextureView 的用法详解:
一、添加 TextureView 到布局文件
首先,在你的布局文件中添加 TextureView
xml<TextureView
    android:id="@+id/textureView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
二、在代码中获取 TextureView 对象
在你的 Activity 或 Fragment 中,通过 findViewById 获取 TextureView 对象:
javaTextureView textureView = findViewById(R.id.textureView);
三、设置 SurfaceTextureListener
为了监听 TextureViewSurfaceTexture 的生命周期,需要设置 SurfaceTextureListener
javatextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        // 在 SurfaceTexture 可用时执行初始化操作,比如打开相机或者准备视频播放
    }
    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
        // 在 SurfaceTexture 尺寸变化时执行相应操作,通常用于处理屏幕旋转
    }
    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
        // 在 SurfaceTexture 销毁时执行清理操作,比如释放相机或停止视频播放
        return true;
    }
    @Override
    public android layout布局void onSurfaceTextureUpdated(SurfaceTexture surface) {
        // 在 SurfaceTexture 更新时执行相应操作,通常用于处理实时视频流的帧数据
    }
});
四、使用 SurfaceTexture 进行绘制
onSurfaceTextureAvailable 回调中,可以获取 SurfaceTexture 对象,进而创建 Surface 对象用于相机预览或视频播放:
java@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
    Surface surface = new Surface(surface);
   
    // 在这里进行相机初始化或视频播放的相关操作
    // 比如:Camera camera = Camera.open();
    // 或:MediaPlayer mediaPlayer = new MediaPlayer();
}
五、TextureView 的变换
TextureView 具有独特的变换能力,你可以通过 setTransform 方法来实现缩放、旋转等效果:
javaMatrix matrix = new Matrix();
// 设置缩放比例
matrix.setScale(0.5f, 0.5f);
// 设置旋转角度
matrix.postRotate(90);
// 应用变换
textureView.setTransform(matrix);
六、在 TextureView 中绘制图形
你还可以在 TextureView 上绘制图形,比如通过 Canvas 绘制文字、图像等:
javaCanvas canvas = textureView.lockCanvas();
// 在 canvas 上进行绘制操作,比如绘制文字
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setTextSize(30);
canvas.drawText("Hello TextureView", 50, 50, paint);
// 结束绘制
textureView.unlockCanvasAndPost(canvas);
七、TextureView 的释放
在不再使用 TextureView 的时候,应当调用 TextureViewonSurfaceTextureDestroyed 回调中执行清理操作,比如释放相机或停止视频播放。
通过上述步骤,你可以充分利用 TextureView 强大的功能,实现灵活而高效的视频预览或播放效果。记得在使用过程中注意生命周期管理,避免内存泄漏和资源浪费。