package com.letv.commonjar.utils; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.os.SystemProperties; import android.util.DisplayMetrics; import android.view.Display; import android.view.Surface; import android.view.WindowManager; public class JScreenTool { public static DisplayMetrics getDisplayMetrics(Activity ctx) { DisplayMetrics metric = new DisplayMetrics(); ctx.getWindowManager().getDefaultDisplay().getMetrics(metric); return metric; } public static int[] getSize(Activity ctx) { int[] size = {0, 0}; DisplayMetrics metric = new DisplayMetrics(); ctx.getWindowManager().getDefaultDisplay().getMetrics(metric); size[0] = metric.widthPixels; size[1] = metric.heightPixels; return size; } public static float getDensity(Activity ctx) { DisplayMetrics metric = new DisplayMetrics(); ctx.getWindowManager().getDefaultDisplay().getMetrics(metric); return metric.density; } public static int getf(Activity ctx) { DisplayMetrics metric = new DisplayMetrics(); ctx.getWindowManager().getDefaultDisplay().getMetrics(metric); return metric.densityDpi; } private static float getDegreesForRotation(int value) { switch (value) { case Surface.ROTATION_90: return 360f - 90f; case Surface.ROTATION_180: return 360f - 180f; case Surface.ROTATION_270: return 360f - 270f; } return 0f; } /** * caller must add <android:sharedUserId="android.uid.system"> in AndroidManifest.xml * * @param ctx * @return screenshot bitmap */ public static Bitmap takeScreenshot(Context ctx) { WindowManager mWindowManager = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); Display mDisplay = mWindowManager.getDefaultDisplay(); DisplayMetrics mDisplayMetrics = new DisplayMetrics(); mDisplay.getRealMetrics(mDisplayMetrics); Matrix mDisplayMatrix = new Matrix(); float[] dims = {mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels}; int value = mDisplay.getRotation(); String hwRotation = SystemProperties.get("ro.sf.hwrotation", "0"); if (hwRotation.equals("270") || hwRotation.equals("90")) { value = (value + 3) % 4; } float degrees = getDegreesForRotation(value); boolean requiresRotation = (degrees > 0); if (requiresRotation) { // Get the dimensions of the device in its native orientation mDisplayMatrix.reset(); mDisplayMatrix.preRotate(-degrees); mDisplayMatrix.mapPoints(dims); dims[0] = Math.abs(dims[0]); dims[1] = Math.abs(dims[1]); } Bitmap mScreenBitmap = null;// Surface.screenshot((int) dims[0], (int) dims[1]); if (requiresRotation && mScreenBitmap != null) { // Rotate the screenshot to the current orientation Bitmap ss = Bitmap.createBitmap(mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(ss); c.translate(ss.getWidth() / 2, ss.getHeight() / 2); c.rotate(degrees); c.translate(-dims[0] / 2, -dims[1] / 2); c.drawBitmap(mScreenBitmap, 0, 0, null); c.setBitmap(null); mScreenBitmap = ss; } if (mScreenBitmap == null) { return null; } // Optimizations mScreenBitmap.setHasAlpha(false); mScreenBitmap.prepareToDraw(); return mScreenBitmap; } }