項(xiàng)目開發(fā)用到拍照顯示圖片,有這些問(wèn)題:
1.項(xiàng)目需求:彈出框中調(diào)用相機(jī)拍照,其他手機(jī)沒(méi)有問(wèn)題,唯獨(dú)三星手機(jī)在拍照時(shí)會(huì)自動(dòng)旋轉(zhuǎn),這樣原來(lái)的Dialog會(huì)消失,在不判空的情況下,返回圖片路徑顯示在原來(lái)Dialog上會(huì)報(bào)錯(cuò),如果加了判空,當(dāng)然不會(huì)報(bào)錯(cuò),但是原來(lái)的Dialog已經(jīng)消失,之前填寫的數(shù)據(jù)都將消失。網(wǎng)上查詢解決方法,xml文件給activity配置android:configChanges="orientation|screenSize"屬性,然后在activity重載onConfigurationChanged方法,這樣確實(shí)解決三星拍照問(wèn)題,但是引出另一個(gè)問(wèn)題,就是這個(gè)界面將支持橫豎屏切換,然后想到一種解決方案,就是雖然在xml中配置了屬性,那么在代碼中應(yīng)該可以設(shè)置橫豎屏屬性,參考http://blog.sina.com.cn/s/blog_5da93c8f01012pnd.html終于完美解決這個(gè)問(wèn)題
2.項(xiàng)目需求:在另一個(gè)界面同樣用手機(jī)拍照,但是這個(gè)界面支持橫豎屏切換,但是橫豎屏是兩個(gè)布局,切換時(shí)要重新加載另一個(gè)布局。同樣的用到了第一個(gè)需求里面的方法這樣也能夠解決三星的問(wèn)題了,但是在拍照的時(shí)候橫豎屏切換呢,這個(gè)時(shí)候又血崩,之前的Dialog沒(méi)了,用不了了,所以在我在彈出框顯示的時(shí)候把界面強(qiáng)制顯示當(dāng)前的橫豎屏其中一個(gè),不讓它旋轉(zhuǎn),當(dāng)dialog消失再把這個(gè)屬性放出來(lái)可以旋轉(zhuǎn),但是又引起一個(gè)問(wèn)題,用上面的方法activity將不會(huì)重建,這樣就不會(huì)重新加載另一個(gè)布局,然后查看橫豎屏切換的所走的方法,知道會(huì)走onConfigurationChanged方法,這時(shí)候我就想到把當(dāng)前activity殺掉重啟,所以用到了recreate方法,解決了這個(gè)問(wèn)題。
3.三星拍照還有個(gè)問(wèn)題,拍出來(lái)的照片是旋轉(zhuǎn)了90度的,想哭的心都有了,三星手機(jī)真坑,只能尋找照片旋轉(zhuǎn)的方法,源地址找不到了,這里就把代碼貼出來(lái)了:
**
* 讀取圖片屬性:旋轉(zhuǎn)的角度
*@parampath圖片絕對(duì)路徑
*@returndegree旋轉(zhuǎn)的角度
*/
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;
}
/**
* 旋轉(zhuǎn)圖片
*@paramangle
*@parambitmap
*@returnBitmap
*/
public staticBitmaprotaingImageView(intangle,Bitmap bitmap) {
//旋轉(zhuǎn)圖片 動(dòng)作
Matrix matrix =newMatrix();;
matrix.postRotate(angle);
System.out.println("angle2="+ angle);
// 創(chuàng)建新的圖片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap,0,0,
bitmap.getWidth(),bitmap.getHeight(),matrix, true);
returnresizedBitmap;
}
以上作為一個(gè)記錄在項(xiàng)目開發(fā)中遇到的問(wèn)題,如果有人有更好的解決的方法,可以留言,一起討論。