package com.jingewenku.abrahamcaijin.commonutil; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.Display; import android.view.View; import android.view.WindowManager; import java.lang.reflect.Method; /** * 主要功能:有关Android屏幕的工具类 * @Prject: CommonUtilLibrary * @Package: com.jingewenku.abrahamcaijin.commonutil * @author: AbrahamCaiJin * @date: 2017年05月04日 14:13 * @Copyright: 个人版权所有 * @Company: * @version: 1.0.0 */ public class AppScreenMgr { /** * Get the width of the screen. *获得屏幕宽度 * @param context * The context to use. Usually your * {@link android.app.Application} or * {@link Activity} object. * @return Return the width of the screen. */ public static int getScreenWidth(Context context) { WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(metrics); return metrics.widthPixels; } /** * Get the height of the screen. *获得屏幕高度 * @param context * The context to use. Usually your * {@link android.app.Application} or * {@link Activity} object. * @return Return the height of the screen. */ public static int getScreenHeight(Context context) { WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); windowManager.getDefaultDisplay().getMetrics(metrics); return metrics.heightPixels; } /** * * Whether the Status bar is hidden or not,the method always helps you get * the height of Status bar. *获得状态栏的高度 * @param context * The context to use. Usually your * {@link android.app.Application} or * {@link Activity} object. * @return Return the height of Status bar. */ public static int getStatusHeight(Context context) { int statusHeight = -1; try { Class<?> clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int id = (Integer) (clazz.getField("status_bar_height").get(object)); statusHeight = context.getResources().getDimensionPixelSize(id); } catch (Exception e) { e.printStackTrace(); } return statusHeight; } /** * 功能描述:获取整块屏幕的高度 * * @param context * @return int */ public static int getRealScreenHeight(Context context) { int dpi = 0; Display display = ((Activity) context).getWindowManager() .getDefaultDisplay(); DisplayMetrics dm = new DisplayMetrics(); @SuppressWarnings("rawtypes") Class c; try { c = Class.forName("android.view.Display"); @SuppressWarnings("unchecked") Method method = c.getMethod("getRealMetrics", DisplayMetrics.class); method.invoke(display, dm); dpi = dm.heightPixels; } catch (Exception e) { e.printStackTrace(); } return dpi; } /** * 功能描述:获取虚拟按键区域的高度 * * @param context * @return int 如果有虚拟按键则返回其高度否则返回0; */ public static int getNavigationAreaHeight(Context context) { int realScreenHeight = AppScreenMgr.getRealScreenHeight(context); int screenHeight = AppScreenMgr.getScreenHeight(context); return realScreenHeight - screenHeight; } private AppScreenMgr() { /* cannot be instantiated */ throw new UnsupportedOperationException("cannot be instantiated"); } /** * 获取当前屏幕截图,包含状态栏 */ public static Bitmap snapShotWithStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); int width = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, 0, width, height); view.destroyDrawingCache(); return bp; } /** * 获取当前屏幕截图,不包含状态栏 */ public static Bitmap snapShotWithoutStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; int width = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return bp; } }