我有一个Activity,需要锁定它的方向
setRequestedOrientation(screenOrientation);
但我希望获得方向更新,以便我可以对UI进行调整(想象一下HTC相机应用程序,只有按钮的图标改变方向).
所以我找到了this class.它提供了0到360之间的方向值.我可以过滤这个值,即完美区间[a,b],如果< x< b那么方向是横向还是纵向?计算意味着什么?任何提示?
解决方法
听起来你需要代码才能在设备的方向改变为4个法线方向之一而不是每个角度时做出反应.这会将方向过滤为仅限0度,90度,180度和270度的值:
OrientationEventListener myOrientationEventListener; int iOrientation; myOrientationEventListener = new OrientationEventListener(this,SensorManager.SENSOR_DELAY_NORMAL) { @Override public void onOrientationChanged(int iAngle) { // 0 15 30 45 60 75,90 105,120,135,150,165,180,195,210,225,240,255,270,285,300,315,330,345 final int iLookup[] = {0,90,0}; // 15-degree increments if (iAngle != ORIENTATION_UNKNOWN) { int iNewOrientation = iLookup[iAngle / 15]; if (iOrientation != iNewOrientation) { iOrientation = iNewOrientation; // take action on new orientation here } } } }; // To display if orientation detection will work and enable it if (myOrientationEventListener.canDetectOrientation()) { Toast.makeText(this,"Can DetectOrientation",Toast.LENGTH_LONG).show(); myOrientationEventListener.enable(); } else { Toast.makeText(this,"Can't DetectOrientation",Toast.LENGTH_LONG).show(); }