Активировать камеру внутри вкладки (Android) - PullRequest
2 голосов
/ 14 марта 2011

Я пытаюсь разработать приложение с 3 вкладками, чтобы 1-я вкладка включала камеру и захватывала изображение. Пока у меня есть 2 проблемы с камерой:

  1. Я хочу, чтобы камера блокировалась в портретном или ландшафтном режиме. Если я заблокирую камеру в портретном режиме, изображение будет повернуто, и я попробовал почти все с параметрами camera.parameters, но не могу это исправить. Если я заблокирую камеру в альбомном режиме, проблема в том, что меню вкладок также меняет ориентацию на альбомную. Есть ли способ изменить ориентацию только внутри этой вкладки и выйти из меню вкладок в портретном режиме?

  2. Изображение как-то растянуто. Я предполагаю, что проблема в том, что камера использует высоту и ширину полного экрана, но мое приложение пытается подогнать предварительный просмотр камеры внутри рамки, которая меньше, чем экран из-за меню вкладок, таким образом, чтобы изображение растягивалось. Есть ли способ исправить это и показать фактический предварительный просмотр камеры с помощью меню вкладок?

Я использую 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 действие для каждой вкладки. Специально для 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 голосов
/ 12 апреля 2011

Я сделал это с 3 вкладками, где первой вкладкой должен быть предварительный просмотр камеры в портретном режиме без искажений.Что ж, это возможно с помощью трех приемов:)

Сначала установите режим предварительного просмотра в портретном режиме, чтобы вкладка была в портретном режиме.Либо используйте в onCreate ()

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

или в манифесте

android:screenOrientation="portrait"

Тогда для поворота экрана не следует использовать параметр, поскольку он не работает, но (только с 2.2)

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

Наконец, чтобы избежать strectch, вы можете, но 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вуаля!

...