有关Android屏幕的工具类 → AppScreenMgr

 
package com.jingewenku.abrahamcaijin.commonutil;

  import android.app.Activity;
  import android.content.Context;
  import android.content.res.Resources;
  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;
  }
   
  /**
  * 获取导航栏高度
  * @param c
  * @return
  */
  public static int getNavigationBarrH(Context c) {
  Resources resources = c.getResources();
  int identifier = resources.getIdentifier("navigation_bar_height", "dimen", "android");
  return resources.getDimensionPixelOffset(identifier);
  }
   
  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;
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值