自定义相机旋转拍照角度

来源:互联网 发布:mac版的photoshop cc 编辑:程序博客网 时间:2024/05/18 00:49

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

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

 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);

阅读全文
4 0