關(guān)于三星手機(jī)拍照旋轉(zhuǎn)解決和在Dialog調(diào)用相機(jī)拍照返回

項(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)題,如果有人有更好的解決的方法,可以留言,一起討論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容