解决安卓手机竖向拍照后,图像横屏展示的问题。

时间:2021-03-12 03:21:16 相术

安卓手机调用系统的相机拍照之后,本来应该是根据你手机的拍照方向,预览照片应该是根据你手持手机的方向不一样而不一样。但是现在就有一个问题手机不自动横屏看相片,华为手机是正常的,但是像Vivo和小米手机跳用系统的相机拍照之后,显示的预览图是横屏的。

首先试着解决Activity的显示方式只能是竖屏:

android:screenOrientation="portrait"

发现加上之后华为是可以正常显示的,但是小米和vivo手机还是不行。

Android 设置禁止横屏失效解决方法

加上代码申请竖屏之后,解决了vivo手机的问题,可以正常显示。但是小米系列手机不行!

后来发现小米手机的拍照之后,图片默认是横向显示的,也就是手机其实还是正常的竖屏手机不自动横屏看相片,但是照片被旋转了90度显示。

下面是小米的适配代码:

hideTakePhotoLayout();
                BitmapFactory.Options options = new BitmapFactory.Options();
                Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length,options);
                //在这里判断显示图片的旋转角度,然后正确旋转之后显示
                Matrix matrix = new Matrix();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
               //compress方法是把一个位图写到一个OutputStream中,参数一是位图对象,二是格式,三是压缩的质量,四是输出流
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
               //输出流转成输入流
                InputStream inputimage = new ByteArrayInputStream(baos.toByteArray());
                matrix.postRotate(getPhotoRotation(inputimage));
              
                Log.e(">>>>>>>>>>>>>","getPhotoRotation(inputimage):"+getPhotoRotation(inputimage));
                if ("xiaomi".equalsIgnoreCase(Build.MANUFACTURER)) {
                      matrix.postRotate(90); //小米手机需要旋转90度正常显示
                }
                bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
                vShowPhoto.setImageBitmap(bitmap);
                bases64 = EncryptHelper.getBase64(bytes);
                if (vloadingLay != null)
                    vloadingLay.setVisibility(View.VISIBLE);
                if(vloading != null)
                    vloading.setText("翻译中...");
                startTranslate(bases64);

需要获取图片旋转的角度的方法:

但是这个代码还是根据了手机的不同型号进行了适配。

解决方案二:

把手机的拍照的方向全部设置成横屏,那么拍的照片也就是横屏的照片。

读过此篇文章的网友还读过: