在选项卡内激活相机(android)

时间:2011-03-14 07:04:48

标签: android tabs camera orientation

我正在尝试使用3个选项卡开发应用程序,以便第1个选项卡启用相机并捕获图像。到目前为止,我有两个相机问题:

  1. 我希望相机以纵向或横向模式锁定。如果我以纵向锁定相机,那么图像似乎旋转了,我已经尝试了几乎所有的相机。参数,但无法修复它。如果我以横向模式锁定相机,则问题是标签菜单也会将方向更改为横向。有没有办法只在该标签内更改方向,并将标签菜单保留为纵向模式?

  2. 图像以某种方式伸展。我想问题是相机使用全屏的高度和宽度,但是我的应用程序试图使相机预览适合小于屏幕的框架布局,因为选项卡菜单,因此图像被拉伸。有没有办法解决这个问题,并用标签菜单显示实际的相机预览?

  3. 我使用1个活动来创建3个标签并使用此布局:

    <?xml version="1.0" encoding="utf-8"?>
    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@android:id/tabhost"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
      <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:layout_weight="1"/>
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"/>
      </LinearLayout>
    </TabHost>
    

    我为每个标签使用1个活动。特别是对于第一个选项卡(相机),我使用以下布局中的preview.class:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout" android:orientation="vertical" android:layout_height="wrap_content" android:layout_width="wrap_content">
    <FrameLayout android:layout_weight="1" android:id="@+id/preview" android:layout_gravity="fill_vertical" android:fitsSystemWindows="true" android:layout_height="wrap_content" android:layout_width="wrap_content">
    </FrameLayout>
    <Button android:text="Click" android:id="@+id/buttonClick" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center"></Button>
    </LinearLayout>
    

1 个答案:

答案 0 :(得分:0)

我用3个标签做了,第一个标签必须是纵向模式下的相机预览,没有失真。 嗯,这可能有3个技巧:)

首先使用纵向模式设置子预览活动,以强制选项卡为纵向。 在onCreate()中使用

this.getParent().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

或在清单

android:screenOrientation="portrait"

然后旋转屏幕你不应该使用参数,因为它不起作用,但(仅限2.2)

if (Build.VERSION.SDK_INT >= 8 ) camera.setDisplayOrientation(90);

最后为了避免拉伸,你可以全屏显示FameLayout并将其移到标签下(标签就像一个叠加层,但下面的相机是全屏而不失真)

<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@android:id/tabs"/>

Et瞧!