package com.cheng.utils;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
/**
* 系统显示相关工具类
*/
public final class DisplayUtil {
/**
* Don't let anyone instantiate this class.
*/
private DisplayUtil() {
throw new Error("Do not need instantiate!");
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
* @param context 上下文
* @param dpValue 尺寸dip
* @return 像素值
*/
public static int dp2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
* @param context 上下文
* @param pxValue 尺寸像素
* @return DIP值
*/
public static int px2dp(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 sp
* @param context 上下文
* @param pxValue 尺寸像素
* @return SP值
*/
public static int px2sp(Context context, float pxValue) {
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
/**
* 根据手机的分辨率从 sp 的单位 转成为 px
* @param context 上下文
* @param spValue SP值
* @return 像素值
*/
public static int sp2px(Context context, float spValue) {
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
/**
* 获取dialog宽度
*
* @param activity Activity
* @return Dialog宽度
*/
public static int getDialogW(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
dm = activity.getResources().getDisplayMetrics();
int w = dm.widthPixels - 100;
// int w = aty.getWindowManager().getDefaultDisplay().getWidth() - 100;
return w;
}
/**
* 获取屏幕宽度
*
* @param activity Activity
* @return 屏幕宽度
*/
public static int getScreenW(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
dm = activity.getResources().getDisplayMetrics();
int w = dm.widthPixels;
// int w = aty.getWindowManager().getDefaultDisplay().getWidth();
return w;
}
/**
* 获取屏幕高度
*
* @param activity Activity
* @return 屏幕高度
*/
public static int getScreenH(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
dm = activity.getResources().getDisplayMetrics();
int h = dm.heightPixels;
// int h = aty.getWindowManager().getDefaultDisplay().getHeight();
return h;
}
/**
* Toggle keyboard If the keyboard is visible,then hidden it,if it's
* invisible,then show it
*
* @param context 上下文
*/
public static void toggleKeyboard(Context context) {
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
/**
* 获得状态栏的高度
*
* @param context
* @return
*/
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;
}
/**
* 获取当前屏幕截图,包含状态栏
*
* @param activity
* @return
*/
public static Bitmap snapShotWithStatusBar(Activity activity) {
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
int width = getScreenW(activity);
int height = getScreenH(activity);
Bitmap bp = null;
bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
view.destroyDrawingCache();
return bp;
}
/**
* 获取当前屏幕截图,不包含状态栏
*
* @param activity
* @return
*/
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 = getScreenW(activity);
int height = getScreenH(activity);
Bitmap bp = null;
bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
- statusBarHeight);
view.destroyDrawingCache();
return bp;
}
}