gpt4 book ai didi

android - surfaceCreated() 从未被调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:03 34 4
gpt4 key购买 nike

我遇到过与我遇到的问题类似的问题,但我仍然找不到解决方案。我是 Android 开发的新手,所以我很难找到我的问题。无论如何,我正在尝试使用我创建的扩展 SurfaceView 并实现 SurfaceHolder.Callback 的 CameraSurfaceView 类来创建相机预览。无论我在 StartCamera 类中尝试什么,都不会调用 surfaceCreated() 方法,因此我的相机永远不会启动。任何帮助都会很棒,谢谢!

启动相机.java

import net.peterd.zombierun.R;
import android.hardware.Camera;
import android.os.Bundle;
import android.widget.FrameLayout;

public class StartCamera extends BaseActivity {

private Camera mCamera;
private CameraSurfaceView mView;

public void onCreate(Bundle state) {
// TODO Auto-generated constructor stub
super.onCreate(state);
setContentView(R.layout.start_camera);
}

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

mView = new CameraSurfaceView(this);
FrameLayout preview = (FrameLayout) findViewById(R.id.cPreview);
preview.addView(mView);
}

public void onPause() {
mCamera.stopPreview();
mCamera.release();
}

}

CameraSurfaceView.java

import java.io.IOException;
import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback
{
private SurfaceHolder holder;
private Camera camera;

public CameraSurfaceView(Context context)
{
super(context);

//Initiate the Surface Holder properly
this.holder = this.getHolder();
this.holder.addCallback(this);
this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceCreated(SurfaceHolder holder)
{
try
{
//Open the Camera in preview mode
this.camera = Camera.open();
this.camera.setPreviewDisplay(this.holder);
}
catch(IOException ioe)
{
ioe.printStackTrace(System.out);
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
// Now that the size is known, set up the camera parameters and begin
// the preview.
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(width, height);
camera.setParameters(parameters);
camera.startPreview();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
// Surface will be destroyed when replaced with a new screen
//Always make sure to release the Camera instance
camera.stopPreview();
camera.release();
camera = null;
}

public Camera getCamera() {
return camera;
}
}

start_camera.xml

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

<FrameLayout android:id="@+id/cPreview"
android:layout_weight="1" android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>

</LinearLayout>

最佳答案

我遇到了同样的问题。对我来说,这是因为 View 大小被设置为 0,因此从未创建表面。我通过设置特定大小来检查这一点,然后突然调用了回调。 (显然,如果 View 布局在屏幕外,情况也是如此)。

关于android - surfaceCreated() 从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860826/

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