您的位置:首页 > 移动开发 > Android开发

Android 获取屏幕高宽度,密度,通知栏高度,截图等常用方法

2015-12-07 17:11 696 查看
分享一下Android中常用的一些辅助方法:

获取屏幕高度:

[java] view
plaincopyprint?

/** 

    * 获得屏幕高度 

    * @param context 

    * @return 

    * by Hankkin at:2015-10-07 21:15:59 

    */  

   public static int getScreenWidth(Context context) {  

       WindowManager wm = (WindowManager) context  

               .getSystemService(Context.WINDOW_SERVICE);  

       DisplayMetrics outMetrics = new DisplayMetrics();  

       wm.getDefaultDisplay().getMetrics(outMetrics);  

       return outMetrics.widthPixels;  

   }  

获取屏幕宽度:

[java] view
plaincopyprint?

/** 

     * 获得屏幕宽度 

     * @param context 

     * @return 

     * by Hankkin at:2015-10-07 21:16:13 

     */  

    public static int getScreenHeight(Context context) {  

        WindowManager wm = (WindowManager) context  

                .getSystemService(Context.WINDOW_SERVICE);  

        DisplayMetrics outMetrics = new DisplayMetrics();  

        wm.getDefaultDisplay().getMetrics(outMetrics);  

        return outMetrics.heightPixels;  

    }  

获取屏幕密度:

[java] view
plaincopyprint?

/** 

     * 获取屏幕密度 

     * @param context 

     * @return 

     * by Hankkin at:2015-10-07 21:16:29 

     */  

    public static float getScreenDensity(Context context) {  

        return context.getResources().getDisplayMetrics().density;  

    }  

dip转px:

[java] view
plaincopyprint?

/** 

     * dip转px像素 

     * @param context 

     * @param px 

     * @return 

     * by Hankkin at:2015-10-07 21:16:43 

     */  

    public static int dip2px(Context context, float px) {  

        final float scale = getScreenDensity(context);  

        return (int) (px * scale + 0.5);  

    }  

获取状态栏高度:

[java] view
plaincopyprint?

/** 

     * 获得状态栏的高度 

     * @param context 

     * @return 

     * by Hankkin at:2015-10-07 21:16:43 

     */  

    public static int getStatusHeight(Context context) {  

  

        int statusHeight = -1;  

        try {  

            Class<?> clazz = Class.forName("com.android.internal.R$dimen");  

            Object object = clazz.newInstance();  

            int height = Integer.parseInt(clazz.getField("status_bar_height")  

                    .get(object).toString());  

            statusHeight = context.getResources().getDimensionPixelSize(height);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

        return statusHeight;  

    }  

获取屏幕当前截图:

[java] view
plaincopyprint?

/** 

     * 获取当前屏幕截图,包含状态栏 

     * @param activity 

     * @return 

     * by Hankkin at:2015-10-07 21:16:43 

     */  

    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;  

  

    }  

  

    /** 

     * 获取当前屏幕截图,不包含状态栏 

     * @param activity 

     * @return 

     * by Hankkin at:2015-10-07 21:16:43 

     */  

    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;  

  

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android