android自定义相机拉伸(stretch)surfaceview

标签 android android-layout camera android-camera android-camera-intent

我遇到了相机 View 的问题,即相机的 View 被拉长了,不像默认相机应用程序或任何其他相机应用程序提供的那样提供正常 View 。 我一直无法获得相机用来拉伸(stretch)大于屏幕尺寸的表面 View 。

 enter code here
  private class SurfaceCallback implements SurfaceHolder.Callback {
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            camera = Camera.open(); 
            camera.setPreviewDisplay(holder); 
            camera.setDisplayOrientation(getPreviewDegree(MainActivity.this));
            camera.startPreview(); // 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
     @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        setCameraParameters();
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
}
  private int getPreviewDegree(Activity activity) {
    int rotation = activity.getWindowManager().getDefaultDisplay()
            .getRotation();
    int degree = 0;

    switch (rotation) {
        case Surface.ROTATION_0:
            degree = 90;
            break;
        case Surface.ROTATION_90:
            degree = 0;
            break;
        case Surface.ROTATION_180:
            degree = 270;
            break;
        case Surface.ROTATION_270:
            degree = 180;
            break;
    }
    return degree;
}

private void setCameraParameters() {

    Camera.Parameters parameters = camera.getParameters();

    List<Camera.Size> sizeList = parameters.getSupportedPreviewSizes();
    if (sizeList.size() > 0) {
        Camera.Size cameraSize = sizeList.get(0);

        parameters.setPreviewSize(cameraSize.width, cameraSize.height);
    }


    sizeList = parameters.getSupportedPictureSizes();
    if (sizeList.size() > 0) {
        Camera.Size cameraSize = sizeList.get(0);
        for (Camera.Size size : sizeList) {

            if (size.width * size.height < 10 * 100) {
                cameraSize = size;
                break;
            }
        }
        parameters.setPictureSize(cameraSize.width, cameraSize.height);
    }

    parameters.setPictureFormat(ImageFormat.JPEG);
    parameters.setJpegQuality(100);
    parameters.setJpegThumbnailQuality(100);

    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
    camera.setParameters(parameters);

    startOrientationChangeListener();
}

private void startOrientationChangeListener() {

    OrientationEventListener mOrEventListener = new    OrientationEventListener(MainActivity.this) {
        @Override
        public void onOrientationChanged(int rotation) {

            if (((rotation >= 0) && (rotation <= 45)) || (rotation > 315)) {
                rotation = 0;
            } else if ((rotation > 45) && (rotation <= 135)) {
                rotation = 90;
            } else if ((rotation > 135) && (rotation <= 225)) {
                rotation = 180;
            } else if ((rotation > 225) && (rotation <= 315)) {
                rotation = 270;
            } else {
                rotation = 0;
            }
            if (rotation == mOrientation)
                return;
            mOrientation = rotation;
            updateCameraOrientation();
        }
    };
    mOrEventListener.enable();
}

 private void updateCameraOrientation() {
    if (camera != null) {
        Camera.Parameters parameters = camera.getParameters();

        int rotation = 90 + mOrientation == 360 ? 0 : 90 + mOrientation;

        if (mIsFrontCamera) {
            if (rotation == 90) rotation = 270;
            else if (rotation == 270) rotation = 90;
        }
        parameters.setRotation(rotation);

        camera.setDisplayOrientation(90);
        camera.setParameters(parameters);
    }
}

最佳答案

您可以从这个项目开始。 https://github.com/pikanji/CameraPreviewSample

关于android自定义相机拉伸(stretch)surfaceview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34450772/

相关文章:

java - Android 如何识别 GS1 DataBar 条形码?

android - 输入耗时(一些对话?)

java - 当人们停止使用您的小部件时如何释放相机?

java - 无法在应用程序中获取我的手机位置

android - 有没有办法在 StaticLayout 中退回到 Typeface.SERIF?

android - 在android studio 1.0中出现retrolambda错误

android - 以编程方式将 View 添加到 ConstraintLayout

android - 如何像在 TabLayout 中一样在 BottomNavigationView 中获取选定的标签行?

android - 如何在 Delphi Android 应用程序中调用原生相机?

python - 相机不适用于 opencv 但适用于 streamer