[java]
前陣子寫了一個拍照的程序,拍完照片圖片怎麼看都是歪的,找了好久借鑒了很多博客找到了解決的辦法,不說了 看代碼把
[java]
mOrientationListener = new OrientationEventListener(this){
@Override
public void onOrientationChanged(int orientation) {
orientations =orientation;
Log.v("time", "現在是橫屏"+orientation);
}
};
在oncreate方法中添加OrientationEventListener,OrientationEventListener(方向事件監聽器)是一個當方向發生變化時, 從 SensorManager(傳感器管理程序)接收通知的輔助類,我就是通過這個來判斷手機屏幕的旋轉角度,從而將獲取後的圖片做相應的旋轉。
接下來我在onResume中啟動事件的監聽器
[html]
if(mOrientationListener!=null){//先判斷下防止出現空指針異常
mOrientationListener.enable();
}
然後就可以在onPictureTaken中將圖片旋轉相應的角度:
[java]
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Config.RGB_565;
opts.inSampleSize =4;
Bitmap bmp = BitmapFactory.decodeByteArray(images, 0, images.length,opts);
Matrix matrixs = new Matrix();
if(orientations > 325 || orientations <= 45){
Log.v("time", "Surface.ROTATION_0;"+orientations);
matrixs.setRotate(90);
}else if(orientations > 45 && orientations <= 135){
Log.v("time", " Surface.ROTATION_270"+orientations);
matrixs.setRotate(180);
}else if(orientations > 135 && orientations < 225){
Log.v("time", "Surface.ROTATION_180;"+orientations);
matrixs.setRotate(270);
}else {
Log.v("time", "Surface.ROTATION_90"+orientations);
matrixs.setRotate(0);
}
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrixs, true);
這樣圖片就旋轉過來了,最後別忘了在onPause中將事件監聽器關掉:
[java]
if(mOrientationListener!=null){
mOrientationListener.disable();
}
ok!這樣就完成了。這算是一點小小的收獲吧!