资讯详情

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 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有助于程序设计。

标签: 传感器ref

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台