安卓拍照问题解决
来源:互联网 发布:windows[1] 编辑:程序博客网 时间:2024/05/01 16:20
一、部分安卓手机拍照后,调用拍照的activity被重建
在部分手机上会出现拍照回来后,界面上东西还原了的问题(比如输入框内的输入拍照回来后没有了)。后来打log查看生命周期的时候发现activity被重建了。为了防止该问题的出现,需要做如下处理:
- 在AndroidMainifest.xml中对应的调用拍照的activity中添加两个属性:
android:configChanges=”orientation|keyboardHidden”
android:launchMode=”singleTask”
- 在调用拍照的activity中java代码内,复写方法onConfigurationChanged,其实这里什么特殊操作也没做。如果项目中所有activity有基类,则在基类中加这个代码就行了。
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); }
二、部分安卓手机中图片文件获取bitmap时旋转了90度
在我的魅族手机拍照后根据图片路径获取bitmap时,发现bitmap图像旋转了90度,部分手机会存在这个问题(可能是手机在拍照保存的时候的问题)。所以需要在根据文件路径获取bitmap对象时判断该文件的旋转角度,若有旋转,则获取到bitmap后对bitmap进行旋转以还原(在手机相册查看图片的时候也是正的,莫非手机相册程序做了这个处理?)。如下工具类中的getSmallBitmap方法,可针对图片文件路径,获取一个压缩后(防止OOM,而且一般需求也不需要获取高清大图)的且一定是正常显示没进行旋转的bitmap对象。
public class BitmapUtils { /** * 根据路径获得图片并压缩,返回bitmap用于显示 * 用于显示本地图片时使用 * * @param filePath 图片路径 * @param width 压缩后的宽 * @param height 压缩后的高 * @return */ public static Bitmap getSmallBitmap(String filePath, int width, int height) { int orientation = readPictureDegree(filePath);//获取旋转角度 final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, width, height); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); if (Math.abs(orientation) > 0) { bitmap = BitmapUtils.rotaingImageView(orientation, bitmap);//旋转图片 } return bitmap; } // 读取图片文件的旋转角度 private static int readPictureDegree(String path) { int degree = 0; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; } } catch (IOException e) { e.printStackTrace(); } return degree; } // 将bitmap旋转指定角度 private static Bitmap rotaingImageView(int angle, Bitmap bitmap) { //旋转图片 动作 Matrix matrix = new Matrix(); matrix.postRotate(angle); // 创建新的图片 Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); return resizedBitmap; } /** * 计算图片的缩放值,等比例缩放使得图片宽高不超过指定宽高 * * @param options * @param reqWidth * @param reqHeight * @return */ private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; }}
0 0
- 安卓拍照问题解决
- 安卓拍照
- 安卓拍照
- 安卓去除拍照声音
- 安卓拍照,各种兼容
- 安卓拍照并裁剪
- 安卓拍照+音乐播放
- 安卓拍照程序4.4可用
- 实现自定义的安卓拍照功能
- Android调用安卓相机拍照上传
- 安卓启动拍照并保存照片
- 安卓调用系统相机拍照
- 安卓利用SurfaceView实现拍照功能
- 安卓 自定义相机,身份证拍照
- 安卓 多媒体之视频,拍照
- 安卓实现手机拍照功能
- 安卓开发:使用手机拍照功能
- 安卓开发工具问题解决方安
- KD树详解及KD树最近邻算法
- 辗转相除法(欧几里德算法)原理
- Java设计模式《三》装饰模式
- wordpress发送邮件设置
- 蓝桥杯 摆动序列(排列树搜索)
- 安卓拍照问题解决
- Eclipse中的Hibernate反向工程
- ubuntu jdk tomcat environment setup
- Visual Studio Code 快捷键 Mac 版
- 主线程等待子线程执行完成的三种方法介绍
- 国内第一款案例式学习JavaScript APP | 码集
- UIAlertController的用法
- centos7安装vsftp
- 腾讯EC .net API对接第三方系统