国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程基于重力傳感器實現橫豎屏放向切換功能

2019-10-22 18:16:09
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程基于重力傳感器實現橫豎屏放向切換功能。分享給大家供大家參考,具體如下:

最近項目中用到了vr視頻播放,因為自己實現,同時要實現橫豎屏自動切換屏幕,核心代碼如下:

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. * 監聽重力系統傳感器的變化,為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, "轉到了橫屏");          if(!MySensorHelper.this.isLandLock) {            Activity mActivity = (Activity)MySensorHelper.this.mActivityWeakRef.get();            if(mActivity != null) {              Log.e(MySensorHelper.TAG, "轉到了橫屏##################");              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, "轉到了豎屏");          if(!MySensorHelper.this.isPortLock) {            Activity mActivity = (Activity)MySensorHelper.this.mActivityWeakRef.get();            if(mActivity != null) {              Log.e(MySensorHelper.TAG, "轉到了豎屏!!!!!!!!!!!!!!!!!!!!!!");              mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);              isPortLock=true;              isLandLock=false;            }          }        }      }    };   //this.disable();  }  //禁用切換屏幕的開關  public void disable() {    Log.e(TAG, "disable");    this.mPortOrientationListener.disable();    this.mLandOrientationListener.disable();  }  //開啟橫豎屏切換的開關  public void enable(){    this.mPortOrientationListener.enable();    this.mLandOrientationListener.enable();  }  //設置豎屏是否上鎖,true鎖定屏幕,fanle解鎖  public void setPortLock(boolean lockFlag) {    this.isPortLock = lockFlag;  }  //設置橫屏是否鎖定,true鎖定,false解鎖  public void setLandLock(boolean isLandLock){    this.isLandLock=isLandLock;  }}

使用時將當前activity對象傳過來即可,但要在activity的ondestory()方法里面或者back鍵的監聽里面禁用屏幕監聽,否則會造成activity不能被回收而導致內存泄漏

helper.disable();

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 无棣县| 海林市| 宜君县| 安化县| 五常市| 朔州市| 郑州市| 巴塘县| 铁力市| 南皮县| 绥滨县| 四平市| 娱乐| 房产| 称多县| 洛扎县| 沙坪坝区| 江津市| 青浦区| 泾阳县| 辽中县| 扬中市| 南漳县| 沿河| 泸溪县| 永德县| 金平| 锡林浩特市| 天气| 九龙城区| 洛隆县| 田林县| 景德镇市| 双鸭山市| 临清市| 那曲县| 江川县| 吉木萨尔县| 阳谷县| 建瓯市| 工布江达县|