检测Android方向:landscape-Left v.landscape-Right

时间:2011-01-18 18:46:51

标签: android

如何检测手机的4个侧面中的哪一个。

我可以检测纵向/横向模式,但如何从横向打开右侧告诉横向左转

基本上我想在用户打开手机时制作一个漂亮的过渡动画。你知道,就像在iPhone的Safari中一样:从之前的布局快速转换到新的400ms。

3 个答案:

答案 0 :(得分:12)

使用OrientationEventListener:

mOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) 
{ 
 @Override
 public void onOrientationChanged(int orientation) 
 {
  mDeviceOrientation = orientation;
 }
};

if(mOrientationEventListener.canDetectOrientation())
{
 mOrientationEventListener.enable();
}
然后,mDeviceOrientation应该是一个整数,告诉你设备旋转的角度,如果你做一些聪明的舍入,你应该能够看到它所处的四个方向中的哪一个:

// Divide by 90 into an int to round, then multiply out to one of 5 positions, either 0,90,180,270,360. 
int orientation = 90*Math.round(mDeviceOrientation / 90); 

// Convert 360 to 0
if(orientation == 360)
{
    orientation = 0;
}

享受!

答案 1 :(得分:7)

刚刚发现:) 2.2+将xml代码放入你的res / values(false)和res / values-xlarge(true)

<resources>
<bool name="isTablet">false</bool>

private void getScreenRotationOnPhone() {

    final Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

    switch (display.getRotation()) {
        case Surface.ROTATION_0:
            System.out.println("SCREEN_ORIENTATION_PORTRAIT");
            break;

        case Surface.ROTATION_90:
            System.out.println("SCREEN_ORIENTATION_LANDSCAPE");
            break;

        case Surface.ROTATION_180:
            System.out.println("SCREEN_ORIENTATION_REVERSE_PORTRAIT");
            break;

        case Surface.ROTATION_270:
            System.out.println("SCREEN_ORIENTATION_REVERSE_LANDSCAPE");
            break;
    }
}

private void getScreenRotationOnTablet() {

    final Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

    switch (display.getRotation()) {
        case Surface.ROTATION_0:
            System.out.println("SCREEN_ORIENTATION_LANDSCAPE");
            break;

        case Surface.ROTATION_90:
            System.out.println("SCREEN_ORIENTATION_REVERSE_PORTRAIT");
            break;

        case Surface.ROTATION_180:
            System.out.println("SCREEN_ORIENTATION_REVERSE_LANDSCAPE");
            break;

        case Surface.ROTATION_270:
            System.out.println("SCREEN_ORIENTATION_PORTRAIT");
            break;
    }
}

private boolean isTabletDevice(){
    boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
    if (tabletSize) {
        return true;
    } else {
        return false;
    }
}

答案 2 :(得分:1)

好像你应该能够从screenOrientation告诉我,通过getRequestedOrientation获取