WindowUtils【視窗工具類】

來源:互聯網
上載者:User

標籤:ase   com   contex   bsp   工具箱   src   out   ons   使用方法   

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

前言

判斷當前介面是橫屏還是豎屏;

擷取當前介面方向。

 

程式碼分析

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 ([email protected]) * <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

WindowUtils【視窗工具類】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.