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

发布于 2024-10-21 16:03:43 字数 2054 浏览 7 评论 0原文

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

  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 个活动。特别是对于第一个选项卡(相机),我在以下布局中使用 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>

I am trying to develop an application with 3 tabs, so that the 1st tab enables the camera and captures an image. So far I have 2 issues with the camera:

  1. I want the camera to lock either in portrait or landscape mode. If I lock the camera in portrait then the image seems rotated and I have tried almost everything with camera.parameters but can't fix it. If I lock the camera in landscape mode then the problem is that the tabs menu also change orientation to landscape. Is there a way to change the orientation only inside that tab and leave the tabs menu in portrait mode?

  2. The image is somehow stretched. I guess the problem is that the camera uses height and width of the full screen, but my app tries to fit the camera preview inside a framelayout that is smaller than the screen because of the tabs menu, so that way the image is stretched. Is there any way to fix this and show the actual camera preview with the tabs menu on it?

I use 1 activity that creates the 3 tabs and uses this layout:

<?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>

I use 1 activity for each tab. Specifically for the 1st tab (camera) I use the preview.class in the following layout:

<?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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不即不离 2024-10-28 16:03:43

我使用了 3 个选项卡,其中第一个选项卡必须是纵向模式下的相机预览,且不失真。
好吧,这可以通过 3 个技巧实现:)

首先将子预览活动设置为纵向模式,以强制选项卡处于纵向模式。
中使用

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

在 onCreate()或清单

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"/>

等等瞧!

I did it with 3 tabs where the first tab has to be the camera preview in portrait mode without distortion.
Well that's possible with 3 tricks :)

First set your sub preview activity with portrait mode to force the tab to be in portrait.
Either use in onCreate()

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

or in manifest

android:screenOrientation="portrait"

Then to rotate the screen you should not use parameter since it doesn't work but (only since 2.2)

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

Finally to avoid strectch you can but the FameLayout in fullscreen and make it go under the tabs (tabs is like an overlay but camera underneath is fullscreen without distortion)

<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 voila!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文