如何设置仅适用于纵向的Android默认相机应用

时间:2014-08-14 14:27:00

标签: android android-camera android-orientation android-camera-intent

在我的Android应用程序中,我正在使用Android default camera为此目的捕获照片我已使用下面的代码。在捕获了一张照片后,我已经将图像显示为全屏模式中的另一个活动。如果我在{{{ 1}}模式我可以将整个图像设置为全屏模式。它表现良好,在显示图像后,我可以执行我的操作。但是如果我从portrait拍摄了一张照片,拍摄的图像将在屏幕中设置为拉伸。所以我想用肖像模式捕捉照片,而不是在风景中。所以我怎么能锁定相机应用程序只为肖像。

landscape

AndroidManifest.xml

String fileName = "Camera_Example.jpg";                
    ContentValues values = new ContentValues();                
    values.put(MediaStore.Images.Media.TITLE, fileName);                
    values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");                
    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);                       
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);   
    startActivityForResult(intent,CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

人像拍摄照片enter image description here

纵向拍摄照片全屏enter image description here

横向捕捉照片enter image description here

横向拍摄照片全屏enter image description here

2 个答案:

答案 0 :(得分:3)

  

我怎么可以锁定相机应用程序只为肖像

你不是。你没有写相机应用程序,因为有数百甚至数千个相机应用程序。由相机应用程序和用户来处理方向。

此外:

  • 在许多设备上,您将在纵向模式下遇到同样的问题

  • 您的风景照片似乎也被拉伸了,但不是那么大

  

但是如果我从风景中拍摄了一张照片,拍摄的图像会在屏幕上显示拉伸

你有一个问题,也许是两个问题:

  1. 您没有考虑照片的方向,因此您正在加载风景照片,就像它是肖像一样。

  2. 您的ImageView或其父级可能配置错误。如果您想要保持照片的宽高比,,您希望ImageView填充某个区域,那么ImageView需要具有相同的宽高比。

  3. 如果确实只想以纵向模式拍照,除了解决问题外,您还需要自己使用android.hardware.Camera,而不是启动第三方相机应用我在上面提到过。

答案 1 :(得分:-1)

请尝试使用以下代码旋转相机:

@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
    camera = Camera.open();
    camera.setDisplayOrientation(90); // camera  portrait oriantation
    try {
        camera.setPreviewDisplay(holder);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}