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