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

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

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) 中实现自己的操作;

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]-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://www.voidcn.com/article/p-ymlgygfw-rr.html

转载请注明出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值