我参考了Grafika 的 CameraCaptureActivity来录制视频,同时显示相机预览。
我对代码所做的更改(相关)是 -
用户单击一个按钮启动PreferencesActivity
,选择首选的相机分辨率(存储width
和height
值),然后单击“返回”按钮返回到CameraCaptureActivity
.
在openCamera
方法中-而不是硬编码width
,height
我从SharedPreferences
AspectFrameLayout's
属性就是这样设置的android:background="@android:color/holo_blue_bright"
。所以预览是匹配的大小AspectFrameLayout
当尺寸从较大的分辨率更改为较小的分辨率时,通常会出现此问题。
在较小的屏幕中(HTC One M7 / Xperia SP)
在大屏幕中(三星 Galaxy Tab S / Nexus 9) -
我注意到发生这种情况是因为onSurfaceChanged
被调用了两次。第一次是错误的值,width
第二height
次是正确的值。
但是,如果我离开活动并返回它而不进行任何更改,布局看起来很好。(就像在不更改分辨率的情况下转到PreferencesActivity
并单击“返回”。)
我在AndroidManifest.xml
-
<activity android:name=".activity.camera.CameraCaptureActivity"
android:launchMode="singleInstance"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.Light.NoActionBar">
</activity>
编辑:只有预览会出现此问题。录制的视频大小正确。
编辑 2:这是我的 layout.xml
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cameracapturescreen_rootparent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
tools:context="com.myapp.CameraCaptureActivity">
<com.myapp.activity.camera.PreviewFrameLayout
android:id="@+id/surfaceview_framelayout"
android:layout_width="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@android:color/holo_blue_bright"
android:layout_height="wrap_content">
<android.opengl.GLSurfaceView
android:id="@+id/cameraPreview_surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"/>
</com.myapp.activity.camera.PreviewFrameLayout>
我确信我传递了正确的值来设置视图的宽度和高度,因为如果我离开活动并返回它而不进行任何更改,预览设置正确。(就像去另一个活动并单击“返回”返回CameraCaptureActivity
。)