【发布时间】:2015-02-12 14:41:46
【问题描述】:
我参考了Grafika's 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。)
【问题讨论】:
-
请添加您的 sn-p,这就是为什么我可以实际找到您的问题
-
你在使用这个活动的 opengl 部分吗.. 那里写有着色器程序.. 这会让你的应用表现得像 thta
-
@VishalPatel :代码位于我在问题第一行给出的链接中。
-
@PreethiRao :是的,我正在使用 OpenGL 部分。我会研究一下着色器程序,看看我能不能解决这个问题。
标签: android android-camera surfaceview grafika