【问题标题】:FrameLayout 4:3 aspect ratioFrameLayout 4:3 纵横比
【发布时间】: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


【解决方案1】:

在从相机获得变量值之前,您无需创建 FrameLayout。假设 FrameLayout 进入了一个 LinearLayout。你会实例化它,然后设置它的参数,所以:

//I used getContext(), but you can change it to yours
FrameLayout frameLayout = new FrameLayout(getContext());
//The layout parameters must ALWAYS be related to the parent. So, if it's a LinearLayout, you'll use LinearLayout.LayoutParams
//Create the parameters using the dimensions you want
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(bWidthFourThree, bHeightFourThree);
//Add your FrameLayout to the LinearLayout passing the parameters
yourLinearLayout.addView(frameLayout, layoutParams);

这样,您将实例化一个 FrameLayout 并在拥有它们之后将相机尺寸传递给它。之后,您可以通过添加视图(如您所做的那样)将图像传递给您的 FrameLayout。

如果它对您有帮助,请告诉我,如果是,请记得投票/选择正确答案。如果您还有更多问题,请回复此答案,干杯

【讨论】:

  • 我不认为这是可能的,如果我给你看文件,我认为它会更有意义。先看看 readme.txt drive.google.com/open?id=0B4vL9wnJulKodmg4S0hyQ1NSSXc 如果你能帮助我在这个问题上卡了很长时间,我真的很感激
  • 稍后再看,我会告诉你的,但据我所知,这是可能的,你为什么说它不是?
  • bWidthFourThree 和 bHeightFourThree 在surfaceview 类中找到,它们只在SurfaceCreated 方法中赋值,所以我无法从照片类中获取它们
  • 看来我无权访问你的驱动器,所以我看不到你的代码:/。例如,为什么不将 FrameLayout 传递给该方法,并使用这些值来实例化它?或者让那个方法返回一个 FrameLayout?
  • 我明白我的问题是什么,不是框架布局。我已经为此工作了好几个小时,我离得很近,但到目前为止。我在这里提出了一个问题,因为这不是问题请看stackoverflow.com/questions/40353028/…
猜你喜欢
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2015-02-06
  • 2012-07-14
相关资源
最近更新 更多