Android相机预览以图片为中心

时间:2011-11-22 19:13:43

标签: android android-layout

我正在创建一个Camera应用程序,我想限制相机预览居中,大约占手机屏幕总大小的60%。

  1. 一种方法是使用padding的FrameLayout预览,以便限制可用的屏幕尺寸,但我还想在限制区域内显示边框(在角落周围),这在此选项中是不可能的。也不是可以以百分比显示填充,以便我可以将用户限制为屏幕大小的60%。
  2. 其他方式是使图像具有透明的中心矩形区域并且在内部矩形角中具有边界。但我不知何故需要在这个矩形内限制预览的FrameLayout,这是我无法做到的。有关此选项的任何建议吗?
  3. 如果还有其他选择,请告诉我。

    感谢。

1 个答案:

答案 0 :(得分:0)

除非我不完全理解使用android:padding为您的布局提供空间的问题,否则您应该能够使用android:layout_margin来实现相同的目标,但要克服您提到的问题。添加填充会在View的边框与其内容之间创建空间。但是,添加边距会在视图边框与其父边框之间创建空间,因此内容仍会将视图本身填充到边缘。但是,您仍然无法根据直接来自XML的百分比来定义视图间距...您需要将边距定义为静态或在Java代码中应用LayoutParams,您可以在此基础上计算所需的边距当前的屏幕尺寸。

另一种选择是利用嵌套android:layout_weight内的LinearLayout属性。计算出的权重总和可以为您提供直接用XML查找的60%。像这样:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center"
  android:weightSum="1.0" >
  <LinearLayout
    android:orientation="vertical"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.6"
    android:gravity="center"
    android:weightSum="1.0">
    <SurfaceView
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_weight="0.6" />
  </LinearLayout>
</LinearLayout>

SurfaceView是相机预览的位置,现在所有方面都占据屏幕的20%。如果您想在此预览上方或下方放置内容,您显然希望将整个块放入RelativeLayoutFrameLayout以及其他组件。

HTH!