Android编程基于重力传感器实现横竖屏放向切换功能
本文实例讲述了Android编程基于重力传感器实现横竖屏放向切换功能。分享给大家供大家参考,具体如下:
最近项目中用到了vr视频播放,因为自己实现,同时要实现横竖屏自动切换屏幕,核心代码如下:
packagecom.d1ev.touch.App.helper; importandroid.app.Activity; importandroid.content.pm.ActivityInfo; importandroid.util.Log; importandroid.view.OrientationEventListener; importjava.lang.ref.WeakReference; /** *CreatedbyAdministratoron2016/12/30003. *监听重力系统传感器的变化,为Vr视频播放器而定制 */ publicclassMySensorHelper{ privatestaticfinalStringTAG=MySensorHelper.class.getSimpleName(); privateOrientationEventListenermLandOrientationListener; privateOrientationEventListenermPortOrientationListener; privateWeakReferencemActivityWeakRef; privatebooleanisPortLock=false; privatebooleanisLandLock=false; publicMySensorHelper(finalActivityactivity){ this.mActivityWeakRef=newWeakReference(activity); this.mLandOrientationListener=newOrientationEventListener(activity,3){ publicvoidonOrientationChanged(intorientation){ Log.d(MySensorHelper.TAG,"mLandOrientationListener"); if(orientation<100&&orientation>80||orientation<280&&orientation>260){ Log.e(MySensorHelper.TAG,"转到了横屏"); if(!MySensorHelper.this.isLandLock){ ActivitymActivity=(Activity)MySensorHelper.this.mActivityWeakRef.get(); if(mActivity!=null){ Log.e(MySensorHelper.TAG,"转到了横屏##################"); mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); isLandLock=true; isPortLock=false; } } } } }; this.mPortOrientationListener=newOrientationEventListener(activity,3){ publicvoidonOrientationChanged(intorientation){ Log.w(MySensorHelper.TAG,"mPortOrientationListener"); if(orientation<10||orientation>350||orientation<190&&orientation>170){ Log.e(MySensorHelper.TAG,"转到了竖屏"); if(!MySensorHelper.this.isPortLock){ ActivitymActivity=(Activity)MySensorHelper.this.mActivityWeakRef.get(); if(mActivity!=null){ Log.e(MySensorHelper.TAG,"转到了竖屏!!!!!!!!!!!!!!!!!!!!!!"); mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); isPortLock=true; isLandLock=false; } } } } }; //this.disable(); } //禁用切换屏幕的开关 publicvoiddisable(){ Log.e(TAG,"disable"); this.mPortOrientationListener.disable(); this.mLandOrientationListener.disable(); } //开启横竖屏切换的开关 publicvoidenable(){ this.mPortOrientationListener.enable(); this.mLandOrientationListener.enable(); } //设置竖屏是否上锁,true锁定屏幕,fanle解锁 publicvoidsetPortLock(booleanlockFlag){ this.isPortLock=lockFlag; } //设置横屏是否锁定,true锁定,false解锁 publicvoidsetLandLock(booleanisLandLock){ this.isLandLock=isLandLock; } }
使用时将当前activity对象传过来即可,但要在activity的ondestory()方法里面或者back键的监听里面禁用屏幕监听,否则会造成activity不能被回收而导致内存泄漏
helper.disable();
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。