Android:屏幕旋转改变视频大小

Android:屏幕旋转改变视频大小,android,video,rotation,Android,Video,Rotation,在我的片段中,我放了一段视频。我不想在屏幕旋转时重新启动活动,所以我添加了android:configChanges=“orientation | screenSize”。但是现在,当我旋转屏幕时,视频的大小非常奇怪。请参见以下图片: 当我旋转到横向时: 当我旋转到纵向时: 只有在我的清单中有android:configChanges=“orientation | screenSize”时才会发生这种情况,如果我将其删除,则不会发生这种情况 以下是我的视频布局: <?xml version

在我的片段中,我放了一段视频。我不想在屏幕旋转时重新启动活动,所以我添加了
android:configChanges=“orientation | screenSize”
。但是现在,当我旋转屏幕时,视频的大小非常奇怪。请参见以下图片:

当我旋转到横向时: 当我旋转到纵向时: 只有在我的清单中有android:configChanges=“orientation | screenSize”时才会发生这种情况,如果我将其删除,则不会发生这种情况

以下是我的视频布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<VideoView
    android:id="@+id/videoView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1" />
</LinearLayout>

当您添加android:configChanges=“orientation | screenSize”并避免重新启动时,系统将在您的活动上调用OnConfiguration Changed()

在这里,您可以处理对应用程序可能很重要的任何事情,例如根据新方向调整视频视图的大小

如果不这样做,系统将使用与显示不匹配的旧视图尺寸

有关如何调整视频视图大小的示例,请参见此答案:

Google的Camerea2Vdieo示例()展示了一种在曲面发生变化时调整视频大小的方法——它们不会停止活动重新启动,但原理是相同的,即检测到“窗口”发生了变化,然后测量新的大小并相应地重设:

使用SurfaceTextRelistener检测更改:

/**
*{@link TextureView.SurfaceTextureListener}处理一个服务器上的多个生命周期事件
*{@link TextureView}。
*/
私有TextureView.SurfaceTextReListener mSurfaceTextureListener
=新的TextureView.SurfaceTextureRelistener(){
@凌驾
表面结构上的公共空隙可用(表面结构表面结构,
整数宽度,整数高度){
开放式摄像机(宽度、高度);
}
@凌驾
表面结构上的公共空隙尺寸已更改(表面结构表面结构,
整数宽度,整数高度){
配置变换(宽度、高度);
}
@凌驾
公共布尔onSurfaceTextureDestroyed(SurfaceTexture SurfaceTexture){
返回true;
}
@凌驾
已更新SurfaceTexture上的公共空间(SurfaceTexture SurfaceTexture){
}
};

纹理的变换在上面的链接中可以看到的configureTransform中完成。

我编写了该代码,但如果我将屏幕旋转更多次,则会发生相同的情况。我该如何解决它?你能展示你的代码吗?这会更容易说出来-作为谷歌Camera2Basic代码预览纹理的一个例子,代码会查找表面纹理预览的更改,然后调整大小。我将添加一个链接并精确到答案。系统昨天没有发送我的评论。我用一根线解决了它。