1. 程式人生 > >自定義相機旋轉拍照角度

自定義相機旋轉拍照角度

自定義相機拍照時有時會把手機傾斜著拍或者倒過來拍,怎麼能在瀏覽拍攝的照片時看到的是一張正立的圖片呢?

先利用感測器獲得手機的拍照時的角度

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