第一步: AndroidManifest.xml 在Activity添加以下一個屬性
?
<span>android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensor",為的是能夠橫豎屏切換不用再次調用onCreate方法,直接調用onConfigurationChanged方法。screenSize是兼容4.0系統的才可以生效,否則方法沒效。</span>
?
<application
android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
<span
style="color:
#ff0000;">android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="sensor"</span>>
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
第二步,解決豎屏拍照後保存圖片會旋轉90度的問題。這裡只能夠采取曲線救國了,就是把已經拍好的圖片用代碼旋轉90度。
首先判斷當前是橫拍還是豎拍,然後在調用相機拍照後,在保存圖片的方法裡,進行豎拍的照片90度旋轉。
?
PictureCallback
jpeg = new PictureCallback()
{
@Override
public void onPictureTaken(byte[]
data, Camera camera) {
//
TODO Auto-generated method stub
Bitmap
bMap;
try
{//
獲得圖片
bMap
= BitmapFactory.decodeByteArray(data, 0,
data.length);
Bitmap
bMapRotate;
Configuration config = getResources().getConfiguration();
if (config.orientation==1)
{ // 堅拍
Matrix matrix = new Matrix();
matrix.reset();
matrix.postRotate(270);
bMapRotate = Bitmap.createBitmap(bMap, 0, 0,
bMap.getWidth(), bMap.getHeight(),
matrix, true);
bMap = bMapRotate;
}
//
Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
File
file = new File(filePath);
BufferedOutputStream
bos =
new BufferedOutputStream(new FileOutputStream(file));
bMap.compress(Bitmap.CompressFormat.JPEG,
100,
bos);//將圖片壓縮到流中
bos.flush();//輸出
bos.close();//關閉
}catch(Exception
e)
{
e.printStackTrace();
}
}
};
關鍵代碼是以上。
當用豎拍轉橫拍,還是橫拍轉豎拍,都要先在surfaceChanged方法,停止預覽相機,重新設置下攝像頭就不會再出現90度旋轉。