自定義相機旋轉拍照角度
阿新 • • 發佈:2019-01-22
自定義相機拍照時有時會把手機傾斜著拍或者倒過來拍,怎麼能在瀏覽拍攝的照片時看到的是一張正立的圖片呢?
先利用感測器獲得手機的拍照時的角度
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);