如何实现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阻塞或内存溢出事件。