【Android】[转] Android屏幕旋转使用OrientationEventListener的监听

本文探讨了在Android开发中处理屏幕旋转的问题,特别是如何使用OrientationEventListener监听屏幕旋转的每一个角度。当onConfigChanged无法检测180度旋转时,可以使用OrientationEventListener作为替代方案。文章介绍了该监听器的使用方法,包括在onResume和onPause中启用和禁用,以及如何判断不同屏幕角度。
摘要由CSDN通过智能技术生成

说明

遇到一个奇葩的问题,我在使用onConfigChanged拦截屏幕的横竖屏旋转时,发现直接进行180度的横屏/竖屏转换居然没有反应!查找原因发现仅对landscape或者portrait状态有用,而同属于landscape的reverse_landscape并不受影响。那么问题怎么破呢?刚开始想到了用Sensor的状态来监听当前屏幕状态,可是发现针对加速度传感器或者陀螺仪的参数来进行判断太麻烦,这样效率一点不高,无意Google中发现这篇帖子,作者把几个问题阐述的淋漓尽致,轮不着我说什么了,于是收藏之。

最近开发Android Camera相关的程序,被屏幕旋转搞得头大,一方面得考虑屏幕旋转后布局的变化,另一方面得搞清楚屏幕的旋转方向、角度与Camera的Preview角度的关系。本来通过重载Activity的onConfigurationChanged方法,可以检测到屏幕旋转,但发现有一个问题,它只能检测水平方向与垂直方向的切换,无法检测180度的跳转(例如:水平方向突然转180度到水平方向),所以最后不得不换成OrientationEventListener方法来解决问题。在这里分享下经验,并就此顺便总结下Android开发中屏幕旋转的处理吧。

注意

作者提倡的是在onResume()和onPause()处进行事件的监听,但是在另一篇外文博客上看到了作者的用法直接在onCreate()进行注册,并且进行了是否可用的判断,感觉这样的做法比较合理,实现如下:

public class SimpleOrientationActivity extends Activity {
    OrientationEventListener mOrientationListener;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mOrientationListener = new OrientationEventListener(this,
            SensorManager.SENSOR_DELAY_NORMAL) {

            @Override
            public void onOrientationChanged(int orientation) {
                Log.v(DEBUG_TAG,
                    "Orientation changed to " + orientation);
            }
        };

       if (mOrientationListener.canDetectOrientation()) {
           Log.v(DEBUG_TAG, "Can detect orientation");
           mOrientationListener.enable();
       } else {
           Log.v(DEBUG_TAG, "Cannot de
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值