android怎样实现关闭系统自动旋转屏幕时能够自动横竖屏

android 系统关闭系统自动旋转屏幕情况下利用设备感应器(方向传感器)实现横竖屏切换

1.SensorManager详情请查阅http://developer.android.com/reference/android/hardware/SensorManager.html ,这个要比我讲更有效;

2.SensorManager sm=(SensorManager)getSystemService(SENSOR_SERVICE); 

3.在Activity的生命周期方法中注册与移除SensorEventListener;

在onResume()方法中注册sm.registerListerner(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);

其中Ssensor.TYPE_ORIENTATION该常量在3.0后已被Deprecated掉了,当时我还以为在4.0里不建议用了,用其他常量代替结果未能达到效果,然后我就查看sdk中自带的demo中使用的竟然还是这个常量,这样就简单了,剩下的就是在SensorEventListener接口的实现方法中实现自己的操作就可以了;

4.在onSensorChanged(SensorEvent event) 中实现自己的操作;

详情请查看:http://developer.android.com/reference/android/hardware/SensorEvent.html

  • alues[0]: Acceleration minus Gx on the x-axis
  • values[1]: Acceleration minus Gy on the y-axis
  • values[2]: Acceleration minus Gz on the z-axis

根据api文档中的说法在这块我只要values[2]就可实现当屏幕横竖屏时切换屏幕;

大概意思是绕Z轴正向旋转与逆向旋转两种方式,

1.正向旋转时只需要判断values[2]>40.0f&&values[2]<70.0f;

2.逆向旋转时只需要判断values[2]<-40.0f&&values[2]>-70.0f; 

3.屏幕竖直时也就是正向时判断 :values[2]<10.0f&&values[2]>-10.0f; 

当然你也可以根据你的实际情况(转屏时灵敏度)调整这个范围;

在实现中要对event事件加synchronized(this)同步块;

接下来的工作就是在三种状态下设置让屏幕旋转的方向(横屏,竖屏),其中要注意的是横屏有两种状态,正向横屏与逆向横屏时屏幕的内容要显示正确;

在这三种 状态下做的操作如下:

synchronized (this) {
int orientation = getRequestedOrientation();
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
if (40.0f < event.values[2] && event.values[2] < 70.0f) {// 向左
if (orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (-10.0f < event.values[2] && event.values[2] < 10.0f) { // 正北
if (orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
} else if (-70.0f < event.values[2] && event.values[2] < -40.0f) { // 向右
if (orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) {
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
}
} else {
}
}


通过上述判断就可实现系统关闭系统屏幕旋转也能够自动横屏,不过在用上述方式实现前先要对manifest进行配置,详细配置见http://blog.csdn.net/sxn1000/article/details/17098351

转载请注明出处!





你可能感兴趣的:(android横竖屏)