如何实现Android横竖屏监听(portrait到lanscape或者lanscape到portrait),以及从90度横盘转动到270度横屏,或者从270度横屏转到90度横屏的监听方法呢?下面来分别学习这两个方法。
Android横竖屏监听方法,就是手机横竖屏转动会触发的方法,使用了SensorManager中的SensorEventListener监听器来实现,代码如下:
SensorEventListener m_sensorEventListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { Log.i(TAG,"Orientation : PORTRAIT"); } else { Log.i(TAG,"Orientation : LANDSCAPE"); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {} }; SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE); sm.registerListener(m_sensorEventListener, sm.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), SensorManager.SENSOR_DELAY_NORMAL);
Android 90度横盘转动到270度横屏,或者从270度横屏转到90度横屏的监听方法实现,虽然用得少,但是很重要:
WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); int mLastRotation; OrientationEventListener orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) { @Override public void onOrientationChanged(int orientation) { Display display = mWindowManager.getDefaultDisplay(); int rotation = display.getRotation(); if ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && rotation != mLastRotation) { Log.i(TAG, "changed >>> " + rotation); // do something mLastRotation = rotation; } } }; if (orientationEventListener.canDetectOrientation()) { orientationEventListener.enable(); }
因为OrientationEventListener中onOrientationChanged这个监听方法是不断触发的,频率很大,因此需要加入if语句来判断是90度横盘还是270度横盘,以免造成UI阻塞或内存溢出事件。