zoukankan      html  css  js  c++  java
  • WindowUtils【窗口工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处!

    前言

    判断当前界面是横屏还是竖屏;

    获取当前界面方向。

    效果图

     

    代码分析

    isLandscape(Context context): 判断是否横屏

    isPortrait(Context context): 判断是否竖屏

    getScreenOrientation(Activity activity): 获取界面方向

    使用步骤

    一、项目组织结构图

    注意事项:

    1、导入类文件后需要change包名以及重新import R文件路径

    2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

    二、导入步骤

    将WindowUtils复制到项目中

    package com.why.project.windowutilsdemo.utils; /**
     * Copyright 2014 Zhenguo Jin (jinzhenguo1990@gmail.com)
     * <p>
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     * <p>
     * http://www.apache.org/licenses/LICENSE-2.0
     * <p>
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    import android.animation.ValueAnimator;
    import android.app.Activity;
    import android.content.Context;
    import android.content.pm.ActivityInfo;
    import android.content.res.Configuration;
    import android.util.DisplayMetrics;
    import android.view.Surface;
    import android.view.Window;
    import android.view.WindowManager;
    
    /**
     * 窗口工具箱
     *
     * @author zhenguo
     */
    public final class WindowUtils {
    
        /**
         * Don't let anyone instantiate this class.
         */
        private WindowUtils() {
            throw new Error("Do not need instantiate!");
        }
    
        /**
         * 获取当前窗口的旋转角度
         *
         * @param activity activity
         * @return int
         */
        public static int getDisplayRotation(Activity activity) {
            switch (activity.getWindowManager().getDefaultDisplay().getRotation()) {
                case Surface.ROTATION_0:
                    return 0;
                case Surface.ROTATION_90:
                    return 90;
                case Surface.ROTATION_180:
                    return 180;
                case Surface.ROTATION_270:
                    return 270;
                default:
                    return 0;
            }
        }
    
        /**
         * 当前是否是横屏
         *
         * @param context context
         * @return boolean
         */
        public static final boolean isLandscape(Context context) {
            return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
        }
    
        /**
         * 当前是否是竖屏
         *
         * @param context context
         * @return boolean
         */
        public static final boolean isPortrait(Context context) {
            return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
        }
    
        /**
         * 调整窗口的透明度  1.0f,0.5f 变暗
         *
         * @param from    from>=0&&from<=1.0f
         * @param to      to>=0&&to<=1.0f
         * @param context 当前的activity
         */
        public static void dimBackground(final float from, final float to, Activity context) {
            final Window window = context.getWindow();
            ValueAnimator valueAnimator = ValueAnimator.ofFloat(from, to);
            valueAnimator.setDuration(500);
            valueAnimator.addUpdateListener(
                    new ValueAnimator.AnimatorUpdateListener() {
                        @Override
                        public void onAnimationUpdate(ValueAnimator animation) {
                            WindowManager.LayoutParams params
                                    = window.getAttributes();
                            params.alpha = (Float) animation.getAnimatedValue();
                            window.setAttributes(params);
                        }
                    });
            valueAnimator.start();
        }
    
        /**
         * 获取界面方向
         */
        public static int getScreenOrientation(Activity activity) {
            int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
            DisplayMetrics dm = new DisplayMetrics();
            activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
            int width = dm.widthPixels;
            int height = dm.heightPixels;
            int orientation;
            // if the device's natural orientation is portrait:
            if ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) && height > width ||
                    (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && width > height) {
                switch (rotation) {
                    case Surface.ROTATION_0:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
                        break;
                    case Surface.ROTATION_90:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                        break;
                    case Surface.ROTATION_180:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
                        break;
                    case Surface.ROTATION_270:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
                        break;
                    default:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
                        break;
                }
            }
            // if the device's natural orientation is landscape or if the device
            // is square:
            else {
                switch (rotation) {
                    case Surface.ROTATION_0:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                        break;
                    case Surface.ROTATION_90:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
                        break;
                    case Surface.ROTATION_180:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
                        break;
                    case Surface.ROTATION_270:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
                        break;
                    default:
                        orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                        break;
                }
            }
    
            return orientation;
        }
    } 

    三、使用方法

    package com.why.project.windowutilsdemo;
    
    import android.content.pm.ActivityInfo;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.why.project.windowutilsdemo.utils.WindowUtils;
    
    public class MainActivity extends AppCompatActivity {
    
        private TextView tv_show;
        private Button btn_switch;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initViews();
            initEvents();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            //横竖屏切换的时候也会执行
            initDatas();
        }
    
        private void initViews() {
            tv_show = (TextView) findViewById(R.id.tv_show);
            btn_switch = (Button) findViewById(R.id.btn_switch);
        }
    
        private void initDatas() {
            if (WindowUtils.isLandscape(this)) {
                tv_show.setText("当前处于横屏");
            }
            if (WindowUtils.isPortrait(this)) {
                tv_show.setText("当前处于竖屏");
            }
        }
    
        private void initEvents() {
            btn_switch.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    toggleFullScreen();
                }
            });
        }
    
        /**
         * 全屏切换,点击全屏按钮
         */
        private void toggleFullScreen() {
            if (WindowUtils.getScreenOrientation(this) == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
                this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else {
                this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
        }
    }

    混淆配置

    参考资料

    暂时空缺

    项目demo下载地址

     https://github.com/haiyuKing/WindowUtilsDemo

  • 相关阅读:
    P2324 [SCOI2005]骑士精神
    P4160 [SCOI2009]生日快乐
    BZOJ 1103: [POI2007]大都市meg
    P4289 [HAOI2008]移动玩具
    P2472 [SCOI2007]蜥蜴
    adb: command not found 解決方法(转载)
    Thinkpad x230i安装Ubuntu10.04发生no network devices available
    Ubuntu10.04安装与配置nfs服务器(转载)
    RTSP协议简介(转载)
    UIBC 小註解(转载)
  • 原文地址:https://www.cnblogs.com/whycxb/p/7635799.html
Copyright © 2011-2022 走看看