package com.moral.andbrickslib.utils;
|
|
import android.app.Activity;
|
import android.app.KeyguardManager;
|
import android.content.Context;
|
import android.content.pm.ActivityInfo;
|
import android.content.res.Configuration;
|
import android.graphics.Bitmap;
|
import android.util.DisplayMetrics;
|
import android.view.Surface;
|
import android.view.View;
|
import android.view.WindowManager;
|
|
/**
|
* 屏幕相关工具类
|
*/
|
public class ScreenUtils {
|
|
private ScreenUtils() {
|
throw new UnsupportedOperationException("u can't instantiate me...");
|
}
|
|
/**
|
* 获取屏幕的宽度px
|
*
|
* @param context 上下文
|
* @return 屏幕宽px
|
*/
|
public static int getScreenWidth(Context context) {
|
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
|
DisplayMetrics dm = new DisplayMetrics();// 创建了一张白纸
|
windowManager.getDefaultDisplay().getMetrics(dm);// 给白纸设置宽高
|
return dm.widthPixels;
|
}
|
|
/**
|
* 获取屏幕的高度px
|
*
|
* @param context 上下文
|
* @return 屏幕高px
|
*/
|
public static int getScreenHeight(Context context) {
|
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
|
DisplayMetrics dm = new DisplayMetrics();// 创建了一张白纸
|
windowManager.getDefaultDisplay().getMetrics(dm);// 给白纸设置宽高
|
return dm.heightPixels;
|
}
|
|
/**
|
* 设置屏幕为横屏
|
* <p>还有一种就是在Activity中加属性android:screenOrientation="landscape"</p>
|
* <p>不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次</p>
|
* <p>设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次</p>
|
* <p>设置Activity的android:configChanges="orientation|keyboardHidden|screenSize"(4.0以上必须带最后一个参数)时
|
* 切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法</p>
|
*
|
* @param activity activity
|
*/
|
public static void setLandscape(Activity activity) {
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
}
|
|
/**
|
* 设置屏幕为竖屏
|
*
|
* @param activity activity
|
*/
|
public static void setPortrait(Activity activity) {
|
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
}
|
|
/**
|
* 判断是否横屏
|
*
|
* @param context 上下文
|
* @return {@code true}: 是<br>{@code false}: 否
|
*/
|
public static boolean isLandscape(Context context) {
|
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
|
}
|
|
/**
|
* 判断是否竖屏
|
*
|
* @param context 上下文
|
* @return {@code true}: 是<br>{@code false}: 否
|
*/
|
public static boolean isPortrait(Context context) {
|
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
|
}
|
|
/**
|
* 获取屏幕旋转角度
|
*
|
* @param activity activity
|
* @return 屏幕旋转角度
|
*/
|
public static int getScreenRotation(Activity activity) {
|
switch (activity.getWindowManager().getDefaultDisplay().getRotation()) {
|
default:
|
case Surface.ROTATION_0:
|
return 0;
|
case Surface.ROTATION_90:
|
return 90;
|
case Surface.ROTATION_180:
|
return 180;
|
case Surface.ROTATION_270:
|
return 270;
|
}
|
}
|
|
/**
|
* 获取当前屏幕截图,包含状态栏
|
*
|
* @param activity activity
|
* @return Bitmap
|
*/
|
public static Bitmap captureWithStatusBar(Activity activity) {
|
View view = activity.getWindow().getDecorView();
|
view.setDrawingCacheEnabled(true);
|
view.buildDrawingCache();
|
Bitmap bmp = view.getDrawingCache();
|
DisplayMetrics dm = new DisplayMetrics();
|
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
|
Bitmap ret = Bitmap.createBitmap(bmp, 0, 0, dm.widthPixels, dm.heightPixels);
|
view.destroyDrawingCache();
|
return ret;
|
}
|
|
/**
|
* 获取当前屏幕截图,不包含状态栏
|
*
|
* @param activity activity
|
* @return Bitmap
|
*/
|
public static Bitmap captureWithoutStatusBar(Activity activity) {
|
View view = activity.getWindow().getDecorView();
|
view.setDrawingCacheEnabled(true);
|
view.buildDrawingCache();
|
Bitmap bmp = view.getDrawingCache();
|
int statusBarHeight = StatusBarUtil.getStatusBarHeight(activity);
|
DisplayMetrics dm = new DisplayMetrics();
|
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
|
Bitmap ret = Bitmap.createBitmap(bmp, 0, statusBarHeight, dm.widthPixels, dm.heightPixels - statusBarHeight);
|
view.destroyDrawingCache();
|
return ret;
|
}
|
|
/**
|
* 判断是否锁屏
|
*
|
* @param context 上下文
|
* @return {@code true}: 是<br>{@code false}: 否
|
*/
|
public static boolean isScreenLock(Context context) {
|
KeyguardManager km = (KeyguardManager) context
|
.getSystemService(Context.KEYGUARD_SERVICE);
|
return km.inKeyguardRestrictedInputMode();
|
}
|
}
|