您的位置:首页 > 其它

自定义相机旋转拍照角度

2017-07-03 17:07 330 查看
自定义相机拍照时有时会把手机倾斜着拍或者倒过来拍,怎么能在浏览拍摄的照片时看到的是一张正立的图片呢?

先利用传感器获得手机的拍照时的角度

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息