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;
}
}