Android拍照照片旋转重力传感器计算

Android在自定义相机时,最大的痛苦就是不同的手机拍出照片旋转角是不确定的,虽然后视相机默认是横屏为0度角,但在翻转180度后拍出来的照片是被翻转了180°的噢。有些相机左旋90°直接可以保存正常的照片…但这不是我们想要的效果,因为不同的角度拍摄是不确定的,我们一定要知道自己是从哪个角度拍摄的,这样才好确定最好成像怎么处理。

//重力感应器
SensorManager sm;= (SensorManager) getSystemService(SENSOR_SERVICE);
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);

在activity中实现SensorEventListener接口,重写onSensorChanged方法,在里面计算角度值:

 if (Sensor.TYPE_ACCELEROMETER != event.sensor.getType()) {
 return;
 }

float[] values = event.values;
 float ax = values[0];
 float ay = values[1];

double g = Math.sqrt(ax * ax + ay * ay);
 double cos = ay / g;
 if (cos > 1) {
 cos = 1;
 } else if (cos < -1) {
 cos = -1;
 }
 double rad = Math.acos(cos);
 if (ax < 0) {
 rad = 2 * Math.PI - rad;
 }

int uiRot = getWindowManager().getDefaultDisplay().getRotation();
 double uiRad = Math.PI / 2 * uiRot;
 rad -= uiRad;
 rotation = rad;

然后用公式int degree =  (int) (180 * rotation / Math.PI);来计算出角度值。

你可能感兴趣的:(Android拍照照片旋转重力传感器计算)