【问题标题】:How to set Android default camera app for portrait orientation only如何将 Android 默认相机应用设置为仅纵向
【发布时间】:2014-10-08 06:05:30
【问题描述】:

在我的 android 应用程序中,我正在使用 Android default camera 拍摄照片,为此我使用了以下代码。拍摄照片后,我以全屏模式将该图像显示到另一个活动中。如果我以 portrait 模式拍摄图像我可以将整个图像设置为全屏模式。它显示得很好,在显示图像后我可以执行我的操作。但是如果我从landscape 拍摄照片,拍摄的图像将在屏幕上拉伸。所以我想只使用纵向模式而不是横向模式来拍摄照片。那么我如何才能锁定相机应用程序仅用于肖像。

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); 

AndroidManifest.xml

 <activity
     android:name=".TestActivity"
     android:screenOrientation="portrait"
     android:configChanges="orientation"
     android:theme="@android:style/Theme.NoTitleBar" >
     </activity>

人像拍摄照片

人像拍摄照片全屏

风景拍摄照片

风景拍摄照片全屏

【问题讨论】:

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


    【解决方案1】:

    如何才能将相机应用程序锁定为仅用于纵向

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

    另外:

    • 在很多设备上,纵向模式下都会遇到同样的问题

    • 您的风景照片似乎也被拉伸了,虽然没有那么明显

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

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

    1. 您没有考虑照片的方向,因此您加载的是横向照片,就好像它是纵向的一样。

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

      李>

    如果您真的只想在人像模式下拍照,除了解决我提到的问题外,您还需要自己使用android.hardware.Camera,而不是启动第三方相机应用程序以上。

    【讨论】:

      【解决方案2】:

      尝试以下代码旋转相机:

      @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();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 2014-03-23
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多