【问题标题】:Adding CameraInstance() to view添加 CameraInstance() 以查看
【发布时间】:2015-04-30 02:30:07
【问题描述】:

尝试将来自手机摄像头的提要添加到视图中,以便我可以显示它。我一直在学习教程并解决了除此之外的所有其他问题。这是有问题的代码:

private Camera mCamera;
private CameraPreview mPreview;
private SurfaceHolder mHolder;

public CameraPreview(CameraPreview context, Camera camera) {
    super(context);
    mCamera = camera;

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    // deprecated setting, but required on Android versions prior to 3.0
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera);
mCamera = getCameraInstance();
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}

我收到错误消息:

Error:(63, 25) error: incompatible types: CameraPreview cannot be converted to View

非常感谢您对此的任何帮助,如果人们想看到它,我也会发布更多代码。它本质上只是本教程:http://developer.android.com/guide/topics/media/camera.html

【问题讨论】:

  • 你扩展了surfaceView吗?
  • 根据编辑,看起来您已经一起删除了 onCreate 方法(问题所在)。对吗?
  • 是的,这解决了一些问题。快速的附加问题,“super(context)”指向 main.java 中的一个活动,因为我在那里为其放置了一个构造函数,可以吗?如果可以,该构造函数中应该是什么?

标签: android view android-framelayout android-sdk-2.3


【解决方案1】:

尝试使用它而不是您的相机预览

 public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
        private SurfaceHolder mHolder;
        private Camera mCamera;

        public CameraPreview(Context context, Camera camera) {
            super(context);
            mCamera = camera;

            // Install a SurfaceHolder.Callback so we get notified when the
            // underlying surface is created and destroyed.
            mHolder = getHolder();
            mHolder.addCallback(this);
            // deprecated setting, but required on Android versions prior to 3.0
            mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }

        public void surfaceCreated(SurfaceHolder holder) {
            // The Surface has been created, now tell the camera where to draw the preview.
            try {
                mCamera.setDisplayOrientation(90);
                mCamera.setPreviewDisplay(holder);

                mCamera.startPreview();
            } catch (IOException e) {
                Log.d("camera", "Error setting camera preview: " + e.getMessage());
            }
        }

        public void surfaceDestroyed(SurfaceHolder holder) {
            // empty. Take care of releasing the Camera preview in your activity.
        }

        public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

            if (mHolder.getSurface() == null){
                return;
            }

            try {
                mCamera.stopPreview();
            } catch (Exception e){
            }
            try {
                mCamera.setPreviewDisplay(mHolder);
                mCamera.startPreview();

            } catch (Exception e){
                Log.d("camera", "Error starting camera preview: " + e.getMessage());
            }
        }
    }

【讨论】:

  • 是的,我有这个。感谢您的回复。
  • 不,我事先有这个,应该指出来。问题依然存在。
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多