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

首頁 > 系統 > Android > 正文

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

2019-12-12 01:13:33
字體:
來源:轉載
供稿:網友

本文實例講述了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開發入門與進階教程》、《Android視圖View技巧總結》、《Android編程之activity操作技巧總結》、《Android文件操作技巧匯總》、《Android資源操作技巧匯總》及《Android控件用法總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 顺义区| 禹城市| 年辖:市辖区| 瑞昌市| 育儿| 彰化县| 武义县| 滕州市| 宁明县| 甘谷县| 宜宾县| 凤翔县| 珲春市| 嘉峪关市| 吉林市| 乌拉特后旗| 视频| 逊克县| 松江区| 聂拉木县| 正阳县| 安泽县| 垫江县| 佛学| 太谷县| 崇义县| 罗江县| 郁南县| 定日县| 阿瓦提县| 双辽市| 麻栗坡县| 三原县| 平湖市| 静海县| 咸宁市| 甘德县| 康平县| 宁都县| 凤城市| 东乌珠穆沁旗|