项目开发用到拍照显示图片,有这些问题:
1.项目需求:弹出框中调用相机拍照,其他手机没有问题,唯独三星手机在拍照时会自动旋转,这样原来的Dialog会消失,在不判空的情况下,返回图片路径显示在原来Dialog上会报错,如果加了判空,当然不会报错,但是原来的Dialog已经消失,之前填写的数据都将消失。网上查询解决方法,xml文件给activity配置android:configChanges="orientation|screenSize"属性,然后在activity重载onConfigurationChanged方法,这样确实解决三星拍照问题,但是引出另一个问题,就是这个界面将支持横竖屏切换,然后想到一种解决方案,就是虽然在xml中配置了属性,那么在代码中应该可以设置横竖屏属性,参考http://blog.sina.com.cn/s/blog_5da93c8f01012pnd.html终于完美解决这个问题
2.项目需求:在另一个界面同样用手机拍照,但是这个界面支持横竖屏切换,但是横竖屏是两个布局,切换时要重新加载另一个布局。同样的用到了第一个需求里面的方法这样也能够解决三星的问题了,但是在拍照的时候横竖屏切换呢,这个时候又血崩,之前的Dialog没了,用不了了,所以在我在弹出框显示的时候把界面强制显示当前的横竖屏其中一个,不让它旋转,当dialog消失再把这个属性放出来可以旋转,但是又引起一个问题,用上面的方法activity将不会重建,这样就不会重新加载另一个布局,然后查看横竖屏切换的所走的方法,知道会走onConfigurationChanged方法,这时候我就想到把当前activity杀掉重启,所以用到了recreate方法,解决了这个问题。
3.三星拍照还有个问题,拍出来的照片是旋转了90度的,想哭的心都有了,三星手机真坑,只能寻找照片旋转的方法,源地址找不到了,这里就把代码贴出来了:
**
* 读取图片属性:旋转的角度
*@parampath图片绝对路径
*@returndegree旋转的角度
*/
public static intreadPictureDegree(String path) {
intdegree =0;
try{
ExifInterface exifInterface =newExifInterface(path);
intorientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);
switch(orientation) {
caseExifInterface.ORIENTATION_ROTATE_90:
degree =90;
break;
caseExifInterface.ORIENTATION_ROTATE_180:
degree =180;
break;
caseExifInterface.ORIENTATION_ROTATE_270:
degree =270;
break;
}
}catch(IOException e) {
e.printStackTrace();
}
returndegree;
}
/**
* 旋转图片
*@paramangle
*@parambitmap
*@returnBitmap
*/
public staticBitmaprotaingImageView(intangle,Bitmap bitmap) {
//旋转图片 动作
Matrix matrix =newMatrix();;
matrix.postRotate(angle);
System.out.println("angle2="+ angle);
// 创建新的图片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap,0,0,
bitmap.getWidth(),bitmap.getHeight(),matrix, true);
returnresizedBitmap;
}
以上作为一个记录在项目开发中遇到的问题,如果有人有更好的解决的方法,可以留言,一起讨论。