搜索

450

主题

660

帖子

4898

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4898
QQ
发表于 2023-4-4 09:48:12 1436 浏览 0 回复

Andorid10 8541E 相机应用修改成横屏后,出现的常见问题解决...

[QUESTION]
相机应用修改成横屏后,出现的常见问题解决方法...

[ANSWER]
       首先要注意的是,展锐平台的相机应用DreamCamera2是基于竖屏手机设备开发的,未作横屏适配,非必要不建议把相机应用改为横屏,修改成横屏会导致mode的UI错位、部分功能无法使用、预览方向和成像方向不匹配等等许多问题。

根据不同项目需求可能会出现不同的问题,本faq旨在介绍如何将相机应用改为横屏,以及提供一些常见问题的解决方案。以Andorid10 8541E为例

修改成横屏
修改文件vendor\sprd\platform\packages\apps\DreamCamera2\Androidmanifest.xml,把android:screenOrientation的值"portrait"统统替换为"landscape"


修改ui角度,修改相机左下角缩略图旋转角度
  1. 修改文件vendor\sprd\platform\packages\apps\DreamCamera2\src\com\android\camera\widget\RoundedThumbnailView.java

  2. @Override
  3.     public void setOrientation(int degree, boolean animation) {
  4.         mEnableAnimation = animation;
  5.         // make sure in the range of [0, 359]
  6.         degree = degree >= 0 ? degree % 360 : degree % 360 + 360;
  7. +       degree += 90;
复制代码

修改左滑显示的modelist列表图标角度

  1. 修改文件:vendor\sprd\platform\packages\apps\DreamCamera2\src\com\android\camera\ui\ModeSelectorItem.java

  2. @Override
  3.     public void setOrientation(int degree, boolean animation) {
  4.         Log.e(TAG, " setOrientation mCurrentDegree = " + degree);
  5.         mEnableAnimation = animation;
  6.         // make sure in the range of [0, 359]
  7.         degree = degree >= 0 ? degree % 360 : degree % 360 + 360;
  8. +       degree += 90;
  9.         if (degree == mTargetDegree)
复制代码

修改相机顶部ui图标旋转角度
修改文件vendor\sprd\platform\packages\apps\DreamCamera2\src\com\android\camera\ui\RotateImageButton.java

  1. @Override
  2.     public void setOrientation(int degree, boolean animation) {
  3.         mEnableAnimation = animation;
  4.         // make sure in the range of [0, 359]
  5.         degree = degree >= 0 ? degree % 360 : degree % 360 + 360;
  6. +       degree = degree + 90;
  7.         if (degree == mTargetDegree)
  8.             return;


  9.     修改相机拍照按钮旋转角度

  10. vendor\sprd\platform\packages\apps\DreamCamera2\src\com\android\camera\ui\RotateImageView.java

  11.     public void setOrientation(int degree, boolean animation) {
  12.         mEnableAnimation = animation;
  13.         // make sure in the range of [0, 359]
  14.         degree = degree >= 0 ? degree % 360 : degree % 360 + 360;
  15. +       degree = degree + 90;
复制代码

修改预览角度
         camera api1中可以通过setCameraDisplayOrientation()方法修改预览方向,但是camera api2没有旋转预览的相关接口,只能修改sensor_config.xml文件中对应camera id的<Orientation>角度值,可分别尝试使用0/90/180/270这四个值,具体按项目实际情况来定。

修改成像角度,旋转拍照照片角度
  1. Camera APP中,照片角度可通过 ANDROID_JPEG_ORIENTATION tag设置。

  2. DreamCamera2 APP的图片角度可以通过以下 mJpegRotation 来修改。

  3. src/com/android/camera/PhotoModule.java
  4. @Override
  5. public boolean capture() {
  6. .................................
  7. boolean isFrontCamera = info.isFacingFront();
  8. mJpegRotation = CameraUtil.getImageRotation(sensorOrientation,  
  9. deviceOrientation, isFrontCamera);   ////mJpegRotation为图片旋转的角度 可根据实际需求增加 90 180 270
  10. Log.i(TAG, " sensorOrientation = " + sensorOrientation
复制代码




    旋转录像视频角度
Camera APP中,录像角度的修改通过 setOrientationHint(int degrees) 接口实现。
DreamCamera2 APP的录像角度可以通过以下rotation来完成
  1. src/com/android/camera/VideoModule.java
  2. private class VideoRecordStartTask extends AsyncTask<Void, Void, Void> {
  3. .................................
  4.   @Override
  5.   protected void onPostExecute(Void result) {
  6.   .................................
  7.     int rotation = CameraUtil.getImageRotation(sensorOrientation,
  8.            deviceOrientation, isCameraFrontFacing()); ///录像旋转角度rotation  可根据实际需求增加 90 180 270
  9.     /**
  10.     * SPRD: Add for bug 585183, 3d video recoding @{
  11.     * Original Code
  12.     *
  13.     mMediaRecorder.setOrientationHint();
  14.     */
  15.     mMediaRecorder.setOrientationHint(getRecorderOrientationHint(rotation));  //设置录像角度
复制代码

屏蔽无法适配横屏的功能
横屏之后目前无法适配的功能有全景、滤镜等,可以参考如下修改去除:
修改文件vendor\sprd\platform\packages\apps\DreamCamera2\src\com\android\camera\util\CameraUtil.java

  1.        //去除全景
  2.     public static boolean isWideAngleEnable() {
  3. -       return 0 < wideAngleVersion && isBackCameraEnable;
  4. +      //return 0 < wideAngleVersion && isBackCameraEnable;
  5. +             return false;
  6. }

  7.        //去除滤镜
  8.     public static boolean isUseSprdFilter() {
  9. -       return (mFilterVersion == 2);
  10. +      //return (mFilterVersion == 2);
  11. +            return false;
  12. }

  13.        //去除慢动作
  14.     public static boolean isSlowMotionEnabled() {
  15. -                 return isSlowMotionEnabled && isBackCameraEnable();
  16. +        //return isSlowMotionEnabled && isBackCameraEnable();
  17. +                 return false;
  18. }

  19.        //去除有声照片
  20.     public static boolean isVoicePhotoEnable() {
  21. -               return isVoicePhotoEnabled;
  22. +        //return isVoicePhotoEnabled;
  23. +        return false;
  24. }

  25.       //去除二维码
  26.     public static boolean isQrCodeEnabled(){
  27. -      return isQrCodeEnabled && isBackCameraEnable;
  28. +        //return isQrCodeEnabled && isBackCameraEnable;
  29. +           return false;
  30.     }
复制代码




手机微信同号:13682654092
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


登录或注册
快速回复 返回顶部 返回列表