【发布时间】:2016-10-31 01:57:01
【问题描述】:
简介
我在我的应用程序中实现了一个摄像头,它可以拍摄 4:3 比例的图像,这是我的 XML 摄像头
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageCapture">
</FrameLayout>
然后在我的相机类中,我在这个对象上调用我的表面视图:
public FrameLayout preview;
//,,,
preview = (FrameLayout) rootView.findViewById(R.id.imageCapture);
//...
myCameraSurfaceView = new Surface(getActivity(), myCamera);
preview.addView(myCameraSurfaceView);
一切都很好,但是!
问题
我的相机拍了4:3的照片,如下图:
p.setPictureSize(bWidthFourThree, bHeightFourThree);
myCamera.setParameters(param);
所以我捕获的图像是我想要的 4:3 照片。 但是我的相机预览(framelayout/surfaceview 实现)包裹了整个屏幕。
我想要什么
现在我知道问题出在哪里了,它包裹了屏幕,因为宽度和高度都与框架布局的父级匹配。我想要的是:
- 根据bWidthFourThree,BHeightFourThree设置框架布局参数。但是,在设备之间,这些变量可能会由于不同的相机硬件等而改变,所以我无法对宽度和高度进行硬编码。此外,我的相机 SurfaceView 是相机类的内部类,所以我不知道如何在创建帧布局之前获取相机分辨率变量
非常感谢任何帮助,如果需要任何额外信息,请告诉我,我会更新这篇文章
【问题讨论】:
-
你不必在你的xml中拥有FrameLayout,你可以实例化一个新的并设置你的布局参数(通过FrameLayout.LayoutParams),所以你只有在你拥有相机之后才能实例化它方面。之后,您可以将 FrameLayout 添加到另一个视图(LinearLayout,即)。
-
你能给我一个例子吗,我明白你的意思只是不知道如何实现它
-
我会把它作为答案发布
标签: android camera android-camera surfaceview android-framelayout