gpt4 book ai didi

相机预览顶部的 Android 按钮

转载 作者:太空狗 更新时间:2023-10-29 13:25:06 25 4
gpt4 key购买 nike

我想在 Android CameraPreview 上添加按钮。基本上层次结构如下:

  • Activity
    • View 组
      • 表面 View

ViewGroup 是 SurfaceView 的包装器并以 CameraPreview 为中心。

我当前在 Activity.java 中的代码正在运行(没有按钮):

mPreview = new Preview(this, mCamera, mJavaDetector);
setContentView(mPreview);

现在我已经创建了布局并想在其中放置一个按钮。我的布局 main.xml 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layout">

<LinearLayout
android:id="@+id/preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:visibility="visible"
android:layout_alignParentTop="true">
</LinearLayout>

<Button android:text="Freeze" android:id="@+id/someButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>

</RelativeLayout>

我改变了Activity.java:

setContentView(R.layout.main); 
mPreview = new Preview(this, mCamera, mJavaDetector);

LinearLayout ll = (LinearLayout)findViewById(R.id.preview);
if(ll != null)
{
ll.addView(mPreview);
}

然后在 Preview.java 中创建了 SurfaceView

mCameraPreview = new CameraPreview(context, camera, mJavaDetector);
addView(mCameraPreview);

现在屏幕上只有按钮,没有 CameraPreview。你能告诉我我做错了什么吗?谢谢。

编辑:

假设我有这样的 main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">


<fit.vutbr.faceswap.Preview
android:id="@+id/preview"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<fit.vutbr.faceswap.CameraPreview
android:id="@+id/camerapreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</fit.vutbr.faceswap.CameraPreview>

</fit.vutbr.faceswap.Preview>


<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:src="@drawable/switch_100px_white" />

</LinearLayout>

Activity.java 内部:

setContentView(R.layout.main);
mPreview = (Preview) findViewById(R.id.preview);
mPreview.setPreview(this, mCamera, mJavaDetector);

内部 Preview.java:

mCameraPreview = (CameraPreview) findViewById(R.id.camerapreview);
mCameraPreview.setCameraPreview(context, camera, mJavaDetector);

哪里错了?

编辑 2:

好的,事实证明,如果我像这样使用 main.xml,我可以看到 surfaceView:

<?xml version="1.0" encoding="utf-8"?>
<fit.vutbr.faceswap.Preview
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<!-- <ImageButton
android:id="@+id/switch_camera_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:src="@drawable/switch_100px_white" />
-->
<fit.vutbr.faceswap.CameraPreview
android:id="@+id/camerapreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</fit.vutbr.faceswap.CameraPreview>


</fit.vutbr.faceswap.Preview>

我还发现 ViewGroup 在添加新 View 时使用的顺序与其他布局相反,因此第一个添加的是最上面的。

现在,如果我取消对 ImageButton 的注释,我会在整个屏幕上看到按钮,并且永远不会调用 SurfaceView 的 surfaceCreated() 方法。

最佳答案

使用 SurfaceView 而不是 LinearLayout 进行相机预览,如下所示...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<SurfaceView
android:id="@+id/cpPreview"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:layout_gravity="center" />

<Button android:text="Freeze"
android:id="@+id/someButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

然后如下初始化预览...

  private SurfaceView preview=null;
private SurfaceHolder previewHolder=null;
private Camera camera=null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

preview = (SurfaceView)findViewById(R.id.preview);
previewHolder = preview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void onResume() {
super.onResume();

camera=Camera.open();
startPreview();
}

This project可能对您有更多帮助。

关于相机预览顶部的 Android 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22281053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com