需求:横屏拍摄的时候横屏显示,竖屏拍摄的时候竖屏显示
思路:1、录制视频界面布局不随横竖屏切换而变化。
2、横竖屏切换布局不变化的话,录制的视频的方向也就固定了。
解决:1、录制视频界面布局不随横竖屏变化而变化的话,可以直接设定界面的方向固定为竖直方向。
2、监听手机旋转状态,根据旋转角度来修改录制视频的方向。
具体代码:
class MyOrientationEventListener extends OrientationEventListener {
private static final int SENSOR_ANGLE = 25;
public MyOrientationEventListener(Context context) {
super(context);
}
@Override
public void onOrientationChanged(int orientation) {
Log.d("ORIENTATIONA", "onOrientationChanged orientation=" + orientation);
if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
return; //手机平放时,检测不到有效的角度
}
// 竖屏:0、180、360
// 横屏:270、90
//下面是手机旋转准确角度与四个方向角度(0 90 180 270)的转换
if (orientation > 360 - SENSOR_ANGLE || orientation < SENSOR_ANGLE) {
photoOrientation = 0;
} else if (orientation > 90 - SENSOR_ANGLE && orientation < 90 + SENSOR_ANGLE) {
photoOrientation = 90;
} else if (orientation > 180 - SENSOR_ANGLE && orientation < 180 + SENSOR_ANGLE) {
photoOrientation = 180;
} else if (orientation > 270 - SENSOR_ANGLE && orientation < 270 + SENSOR_ANGLE) {
photoOrientation = 270;
} else {
return;
}
}
}
判断手机是否支持重力感应,如果不支持,则设置不可用
listener = new MyOrientationEventListener(this);
if (listener.canDetectOrientation()) {
listener.enable();
}else {
listener.disable();
}
然后在设置录制视频方向前获取角度,根据角度设置录制视频方向
//手机竖直方向
if (MediaRecorderActivity.getPhotoOrientation() == 0 ||
MediaRecorderActivity.getPhotoOrientation() == 180) {
mMediaRecorder.setOrientationHint(or);
}
//手机后置摄像头朝左
if (MediaRecorderActivity.getPhotoOrientation() == 90){
mMediaRecorder.setOrientationHint(180);
}
public static int getPhotoOrientation(){
return photoOrientation;
}
这篇博客主要是提供一个思路,具体需求具体处理。