安卓屏幕旋转

做过视屏的同学肯定经常与屏幕旋转打交道,今天我们就简单说一下,安卓手机中横竖屏旋转的实现。大神略过

public class ScreenRotateUtil extends OrientationEventListener{

    private boolean isBack;  // true 表示在横屏的状态下,按下返回键了,false 表示这时候已经是竖屏了
    private static final int ORIENTATION_PORTRAIT = 1;      // 竖屏
    private static final int ORIENTATION_LANDSCAPE = 2;     // 横屏
    private static final int ORIENTATION_REVERSE_LANDSCAPE = 3; // 反向横屏
    public int currentOreation = ORIENTATION_PORTRAIT; //当前重力感应方向

    public ScreenRotateUtil(Context context,ScreenRotateListener mScreenRotateListener) {
        super(context);
        this.mScreenRotateListener = mScreenRotateListener;
    }

    // 开启监听  建议activity的onCreate方法中调用
    @Override
    public void enable() {
        super.enable();
    }

    // 关闭监听  建议activity的onDestroy方法中调用
    @Override
    public void disable() {
        super.disable();
    }

    // 在横屏的状态下点击了返回键
    public void setBack(boolean b) {
        isBack = b;
    }

    /**
     * 是否是横屏 ,true为横屏
* Configuration.ORIENTATION_LANDSCAPE-2横屏
* Configuration.ORIENTATION_PORTRAIT-1竖屏 * context = Application.getAppContext() */
public static boolean isLandscape(Context context) { return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; } /** * 检查当前用户是否系统锁定了屏幕 * true : 可以转 * false : 不可以转 * */ private boolean checkIsSystemOrientationEnabled() { boolean isOrientationEnabled; try { isOrientationEnabled = Settings.System.getInt(Application.getAppContext().getContentResolver(), Settings.System.ACCELEROMETER_ROTATION) == 1; } catch (Settings.SettingNotFoundException e) { isOrientationEnabled = false; } return isOrientationEnabled; } /** * 手动切换横屏的时候调用的时候 */ public void manualSwitchingLandscape(){ currentOreation = ORIENTATION_LANDSCAPE; } @Override public void onOrientationChanged(int orientation) { int screenOrientation = Application.getAppContext().getResources().getConfiguration().orientation; if (((orientation >= 0) && (orientation < 45)) || (orientation > 315)) { // 设置竖屏 if (currentOreation != ORIENTATION_PORTRAIT) { currentOreation = ORIENTATION_PORTRAIT; if (checkIsSystemOrientationEnabled()) { LogUtil.e("ScreenRotateUtil", "设置竖屏screenOrientation = " + screenOrientation); if (!isBack) { mScreenRotateListener.onPortrait(); } isBack = false; } } ((Activity) getContext()).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if (orientation > 225 && orientation < 315) { // 设置横屏 if (currentOreation != ORIENTATION_LANDSCAPE) { currentOreation = ORIENTATION_LANDSCAPE; if (checkIsSystemOrientationEnabled()) { LogUtil.e("ScreenRotateUtil", "设置横屏screenOrientation = " + screenOrientation); if (!isBack) { mScreenRotateListener.onLandscape(); } } } ((Activity) getContext()).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else if (orientation > 45 && orientation < 135) { // 设置反向横屏 if (currentOreation != ORIENTATION_REVERSE_LANDSCAPE) { currentOreation = ORIENTATION_REVERSE_LANDSCAPE; if (checkIsSystemOrientationEnabled()) { LogUtil.e("ScreenRotateUtil", "设置反向横屏screenOrientation = " + screenOrientation); if (!isBack) { mScreenRotateListener.onReverseLandscape(); } } } ((Activity) getContext()).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } } private ScreenRotateListener mScreenRotateListener; public interface ScreenRotateListener { // 屏幕监听的接口 void onPortrait(); // 竖屏 void onLandscape(); // 横屏 void onReverseLandscape(); // 反向横屏 } }


你可能感兴趣的:(屏幕旋转)