您好,登錄后才能下訂單哦!
小編給大家分享一下Android中如何使用重力傳感器實(shí)現(xiàn)橫豎屏放向切換功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
具體如下:
最近項(xiàng)目中用到了vr視頻播放,因?yàn)樽约簩?shí)現(xiàn),同時(shí)要實(shí)現(xiàn)橫豎屏自動(dòng)切換屏幕,核心代碼如下:
package com.d1ev.touch.App.helper; import android.app.Activity; import android.content.pm.ActivityInfo; import android.util.Log; import android.view.OrientationEventListener; import java.lang.ref.WeakReference; /** * Created by Administrator on 2016/12/3 0003. * 監(jiān)聽(tīng)重力系統(tǒng)傳感器的變化,為Vr視頻播放器而定制 */ public class MySensorHelper { private static final String TAG = MySensorHelper.class.getSimpleName(); private OrientationEventListener mLandOrientationListener; private OrientationEventListener mPortOrientationListener; private WeakReference<Activity> mActivityWeakRef; private boolean isPortLock = false; private boolean isLandLock=false; public MySensorHelper(final Activity activity) { this.mActivityWeakRef = new WeakReference(activity); this.mLandOrientationListener = new OrientationEventListener(activity, 3) { public void onOrientationChanged(int orientation) { Log.d(MySensorHelper.TAG, "mLandOrientationListener"); if(orientation < 100 && orientation > 80 || orientation < 280 && orientation > 260) { Log.e(MySensorHelper.TAG, "轉(zhuǎn)到了橫屏"); if(!MySensorHelper.this.isLandLock) { Activity mActivity = (Activity)MySensorHelper.this.mActivityWeakRef.get(); if(mActivity != null) { Log.e(MySensorHelper.TAG, "轉(zhuǎn)到了橫屏##################"); mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); isLandLock=true; isPortLock=false; } } } } }; this.mPortOrientationListener = new OrientationEventListener(activity, 3) { public void onOrientationChanged(int orientation) { Log.w(MySensorHelper.TAG, "mPortOrientationListener"); if(orientation < 10 || orientation > 350 || orientation < 190 && orientation > 170) { Log.e(MySensorHelper.TAG, "轉(zhuǎn)到了豎屏"); if(!MySensorHelper.this.isPortLock) { Activity mActivity = (Activity)MySensorHelper.this.mActivityWeakRef.get(); if(mActivity != null) { Log.e(MySensorHelper.TAG, "轉(zhuǎn)到了豎屏!!!!!!!!!!!!!!!!!!!!!!"); mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); isPortLock=true; isLandLock=false; } } } } }; //this.disable(); } //禁用切換屏幕的開(kāi)關(guān) public void disable() { Log.e(TAG, "disable"); this.mPortOrientationListener.disable(); this.mLandOrientationListener.disable(); } //開(kāi)啟橫豎屏切換的開(kāi)關(guān) public void enable(){ this.mPortOrientationListener.enable(); this.mLandOrientationListener.enable(); } //設(shè)置豎屏是否上鎖,true鎖定屏幕,fanle解鎖 public void setPortLock(boolean lockFlag) { this.isPortLock = lockFlag; } //設(shè)置橫屏是否鎖定,true鎖定,false解鎖 public void setLandLock(boolean isLandLock){ this.isLandLock=isLandLock; } }
使用時(shí)將當(dāng)前activity對(duì)象傳過(guò)來(lái)即可,但要在activity的ondestory()
方法里面或者back鍵的監(jiān)聽(tīng)里面禁用屏幕監(jiān)聽(tīng),否則會(huì)造成activity不能被回收而導(dǎo)致內(nèi)存泄漏
helper.disable();
以上是“Android中如何使用重力傳感器實(shí)現(xiàn)橫豎屏放向切換功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。