自定义相机拍照时有时会把手机倾斜着拍或者倒过来拍,怎么能在浏览拍摄的照片时看到的是一张正立的图片呢?
先利用传感器获得手机的拍照时的角度
private SensorManager sm = null;
private SensorEventListener sensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
if (Sensor.TYPE_ACCELEROMETER != event.sensor.getType()) {
return;
}
float[] values = event.values;
angle = AngleUtil.getSensorAngle(values[0], values[1]);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
public void registerSensorManager(Context context) {
this.context = context;
if (sm == null) {
sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
}
sm.registerListener(sensorEventListener, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager
.SENSOR_DELAY_NORMAL);
}
public void unregisterSensorManager(Context context) {
if (sm == null) {
sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
}
sm.unregisterListener(sensorEventListener);
}
工具类:旋转角度
public class AngleUtil {
public static int getSensorAngle(float x, float y) {
if (Math.abs(x) > Math.abs(y)) {
/**
* 横屏倾斜角度比较大
*/
if (x > 7) {
/**
* 左边倾斜
*/
return 270;
} else if (x < -7) {
/**
* 右边倾斜
*/
return 90;
} else {
/**
* 倾斜角度不够大
*/
return 0;
}
} else {
if (y > 7) {
/**
* 左边倾斜
*/
return 0;
} else if (y < -7) {
/**
* 右边倾斜
*/
return 180;
} else {
/**
* 倾斜角度不够大
*/
return 0;
}
}
}
}
拍摄完照片之后
int nowAngle = (angle + 90) % 360; matrix.setRotate(nowAngle);