Android编程基于重力传感器实现横竖屏放向切换功能
作者:yuyuyuzhen 发布时间:2022-11-30 00:38:54
标签:Android,重力传感器,横竖屏
本文实例讲述了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


猜你喜欢
- 在此附上超详细JDK1.8安装与配置超详细JDK1.8安装与配置一、卸载JDK应用程序①在开始处,点击设置②点击应用③点击程序和功能④打开程
- 本文实例为大家分享了Java实现 * 系统的具体代码,供大家参考,具体内容如下父类Vehiclepublic abstract class
- ps: 不想看代码的滑到最下面有apk包百度网盘下载地址1. 先看效果图 不然都是耍流氓2.项目目录3.一些配置build.gradlepl
- springboot用以进行web项目开发的便捷性,本文不再赘述,主要是想将工作中基于springboot与gradle的多模块项目的构建经
- 目录1.项目需求描述2.整体思路3.功能实现1.项目需求描述通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的
- 水波纹效果已经不是什么稀罕的东西了,用过5.0新控件的小伙伴都知道这个效果,可是如果使用一个TextView或者Button或者其它普通控件
- package 移位运算;public class 移位运算 { public static void main(String[] args
- Android 列表选择框 Spinner详解及实例Spinner 是 Android 的列表选择框,不过 spinner 并不需要显示下拉
- 前言本文主要给大家介绍了关于C#连接FTP时路径问题的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:今天在开发项目时,需
- 1、原来是将EditView放到了popupwindow,发现EditView原有的复制、粘贴、全选、选择功能失效了,所以便用DialogF
- SQLite分析 SQLite是轻量级的、嵌入式的、关系型数据库,
- 1. 概述平常我们一般是使用JSON与服务器做数据通信,JSON的话,直接用GSON或者其他库去解析很简单。但是,其他有些服务器会返回XML
- 异常日志[com.alibaba.dubbo.rpc.filter.TimeoutFilter] - [DUBBO] invok
- @JsonInclude(JsonInclude.Include.NON_NULL)不起作用记录一下使用@JsonInclude(JsonI
- 简单介绍2020年注定是不平凡的一年,新冠肺炎肆虐全球,传染性特别强,目前全球感人人数还在逐渐攀升,作为中华儿女特别感谢政府作出的努力,非常
- 什么是 Retrofit ?Retrofit是Square开发的一个Android和Java的REST客户端库。这个库非常简单并且具有很多特
- 就把遇到的问题记录一下。写这篇文章时用的TinyMCE编辑器就很强大,但毕竟是第三方的,项目也考虑了这些,如果做些自定义的东西不太方便。 1
- 背景工作中遇到业务诉求是通过OpenCV对图片进行一些判断操作和优化,这里是看了部分不错的文章,希望总结一个自己的学习过程,温故而知新,有不
- Canvas绘制文本时,使用FontMetrics对象,计算位置的坐标。public static class FontMetrics {
- 本文结合之前的动态创建fragment来进行一个实践,来实现用Fragment创建一个选项卡项目布局<LinearLayout xml