Android编程基于重力传感器实现横竖屏放向切换功能

作者:yuyuyuzhen 时间:2022-11-30 00:38:54 

本文实例讲述了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程序设计有所帮助。

来源:http://blog.csdn.net/yuyuyuzhen/article/details/53444525

标签:Android,重力传感器,横竖屏
0
投稿

猜你喜欢

  • java多态的向上转型的概念及实例分析

    2023-06-12 08:30:35
  • mybatis中的if test判断入参的值问题

    2023-11-16 08:13:44
  • Android 通知的基本用法示例代码

    2022-09-28 03:54:50
  • C# List引用类型克隆的3种方法

    2023-04-19 14:20:44
  • C#控制台程序中处理2个关闭事件的代码实例

    2021-11-21 03:45:40
  • Android实现悬浮窗体效果

    2023-03-12 01:04:02
  • 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out

    2022-06-08 16:36:41
  • 使用Maven配置Spring的方法步骤

    2023-02-05 18:37:46
  • spring boot 全局异常处理方法汇总

    2021-07-06 22:44:04
  • c#唯一值渲染实例代码

    2023-09-06 06:54:16
  • 详解Springboot之Logback的使用学习

    2023-08-11 23:51:12
  • c#的异或运算符介绍

    2021-08-09 03:17:51
  • java并发JUC工具包AtomicInteger原子整型语法基础

    2023-10-05 14:16:47
  • Springboot如何根据实体类生成数据库表

    2023-11-20 13:54:39
  • C#常用字符串加密解密方法封装代码

    2022-03-04 08:50:48
  • Android自定义textview实现竖直滚动跑马灯效果

    2023-09-30 07:42:05
  • Android 仿京东、拼多多商品分类页的示例代码

    2023-05-02 13:55:30
  • 解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题

    2023-07-03 11:08:04
  • C#Process的OutputDataReceived事件不触发问题及解决

    2023-08-12 19:22:41
  • android自定义View圆圈拖动

    2023-09-14 01:02:55
  • asp之家 软件编程 m.aspxhome.com