【问题标题】:Fix Android Camera app aspect ratio and rotation修复 Android 相机应用程序的纵横比和旋转
【发布时间】:2013-06-10 21:53:30
【问题描述】:

外观: http://i41.tinypic.com/30278m1.png

看起来像在图片中,我希望它具有正确的纵横比和正确的旋转

请看一下代码,我该如何修复它?

这是我的代码:

    public class MainActivity extends Activity implements SurfaceHolder.Callback {

Camera mCamera;
SurfaceView mPreview; 

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mPreview = (SurfaceView)findViewById(R.id.preview);
    mPreview.getHolder().addCallback(this);
    mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    mCamera = Camera.open();
}   
@Override
public void onPause() {
    super.onPause();
    mCamera.stopPreview();
}    
@Override
public void onDestroy() {
    super.onDestroy();
    mCamera.release();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    Camera.Parameters params = mCamera.getParameters();
    List<Camera.Size> sizes = params.getSupportedPreviewSizes();
    Camera.Size selected = sizes.get(0);
    params.setPreviewSize(selected.width,selected.height);
    mCamera.setParameters(params);
    mCamera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mCamera.setPreviewDisplay(mPreview.getHolder());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    Log.i("PREVIEW","surfaceDestroyed");
}
}

【问题讨论】:

    标签: android android-camera surfaceview aspect-ratio


    【解决方案1】:

    用这个改变你的surfaceChanged方法:

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {       
        Parameters parameters = mCamera.getParameters();
        List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
        Camera.Size previewSize = previewSizes.get(4); //480h x 720w
    
        parameters.setPreviewSize(previewSize.width, previewSize.height);
        parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
    
        mCamera.setParameters(parameters);
    
        Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        if(display.getRotation() == Surface.ROTATION_0) {                        
            mCamera.setDisplayOrientation(90);
        } else if(display.getRotation() == Surface.ROTATION_270) {
            mCamera.setDisplayOrientation(180);
        }
    
        mCamera.startPreview();
    }
    

    希望对你有所帮助!

    【讨论】:

    • isPreviewRunning & getContext 被标记为错误! isPreviewRunning 无法解析为变量& getContext() 方法未定义
    • 好的,我刚刚改了答案。
    • 出色的工作米哈伊尔!成功了,我看了你的网站,你做了很好的项目
    • 您能解释一下解决纵横比问题的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2013-07-22
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多