Android 常用工具类之 ScreenUtil
需求: 截屏
参考 : Android开发:截屏 screenshot 功能小结
package bvb.de.openadbwireless.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.Window;
import android.view.WindowManager; import java.io.FileOutputStream; public class ScreenUtil { /** 获取屏幕密度 */
public static float getScreenDensity(Context context) {
return getDisplayMetrics(context).density;
} /** 获取屏幕宽度(像素) */
public static int getScreenWidthPixels(Context context) {
return getDisplayMetrics(context).widthPixels;
} /** 获取屏幕宽度(dp) */
public static float getScreenWidthDp(Context context) {
DisplayMetrics displayMetrics = getDisplayMetrics(context);
return displayMetrics.widthPixels / displayMetrics.density;
} /** 获取屏幕高度(像素) */
public static int getScreenHeightPixels(Context context) {
return getDisplayMetrics(context).heightPixels;
} /** 获取屏幕高度(dp) */
public static float getScreenHeightDp(Context context) {
DisplayMetrics displayMetrics = getDisplayMetrics(context);
return displayMetrics.heightPixels / displayMetrics.density;
} /** 获取状态栏高度 */
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
* @param strFileName 文件全路径:例如 "/sdcard/screen_shot_20160424.jpg"
*/
public static void savScreenShot(Activity activity, String strFileName) {
Bitmap takeShot = takeShot(activity);
savePic(takeShot, strFileName);
} /**
* 截图
* 也可以调用shell命令去截图 screencap -p test.png
*
* @param activity 截取activity 所在的页面的截图,即使退到后台也是截取这个activity
*/
private static Bitmap takeShot(Activity activity) {
// 获取windows中最顶层的view
View view = activity.getWindow().getDecorView();
// 允许当前窗口保存缓存信息
view.setDrawingCacheEnabled(true);
view.buildDrawingCache(); //状态栏高度
Rect outRect = new Rect();
view.getWindowVisibleDisplayFrame(outRect);
int statusBarHeight = outRect.top; //状态栏+标题栏目的高度
statusBarHeight = activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); //屏幕宽高
int height = getScreenHeightPixels(activity);
int width = getScreenWidthPixels(activity); // 如果需要状态栏,则使用 Bitmap b = Bitmap.createBitmap(view.getDrawingCache(), 0, 0, width, height - statusBarHeight);
Bitmap b = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width, height - statusBarHeight);
// 销毁缓存信息
view.destroyDrawingCache(); return b;
} private static DisplayMetrics getDisplayMetrics(Context context) {
DisplayMetrics outMetrics = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(outMetrics);
return outMetrics;
} // 保存到sdcard
private static void savePic(Bitmap b, String strFileName) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(strFileName);
if (null != fos) {
// 第一参数是图片格式,第二个是图片质量,第三个是输出流
b.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.flush();
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
} }
Android 常用工具类之 ScreenUtil的更多相关文章
- 53. Android常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...
- Android 常用工具类之SPUtil,可以修改默认sp文件的路径
参考: 1. 利用Java反射机制改变SharedPreferences存储路径 Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...
- 【转】Android常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefe ...
- android常用工具类
import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkIn ...
- Android 常用工具类之LogUtil,可以定位到代码行,双击跳转
package cn.utils; import android.util.Log; public class LogUtils { public static boolean isDebug = t ...
- Android常用工具类封装---SharedPreferencesUtil
SharedPreferences常用于保存一些简单的数据,如记录用户操作的配置等,使用简单. public class SharedPreferencesUtil { // ...
- Android 常用工具类之 DimenUtil
public class DimenUtil { /** sp转换成px */ public static int sp2px(float spValue) { float fontScale = M ...
- Android 常用工具类之DeviceInfoUtil
public class DeviceInfoUtil { private static WifiManager wifiManager = null; // wifi是否已连接 public sta ...
- Android 常用工具类之RuntimeUtil
public class RuntimeUtil { /** 通过查询su文件的方式判断手机是否root */ public static boolean hasRootedSilent() { re ...
随机推荐
- 如何在APICloud平台使用腾讯X5引擎
目前APICloud与腾讯X5引擎已经达成全方位的深度合作,APICloud在多个产品线深度集成X5引擎,广大APICloud开发者们即日起可通过以下几方面在你的APP中使用X5引擎,享受X5引擎带来 ...
- [BS-12] JSON的基础知识--百科
JSON的基础知识--百科 http://baike.baidu.com/view/136475.htm
- Android 百度地图SDK 定位
引用locSDK_6.1.3.jar,切记添加相应的so文件. 1.定位初始化,需要使用getApplicationContext() mLocClient = new LocationClient( ...
- [GeoServer]Openlayers简单调用
Openlayers Demo: <html> <head> <title>OpenLayers Example</title> <script ...
- MFC项目中包含atlimage.h导致fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
因为要用到CImage所以包含了atlimage.h 报这个错误的话你只需要把atlimage.h放在afxwin.h的下方即可,不能让它在afxwin.h的上方
- canvas学习之制作动画
html部分 ...... <body> <canvas id="myCanvas" width="400" height="400 ...
- DG - 开启Active Data Guard
在配置active data guard之前,phycial standby必须处于以下两个状态之一: (1)standby处于mount状态,并且redo apply正在运行中 (2)standby ...
- c#异步调用
首先来看一个简单的例子: 小明在烧水,等水烧开以后,将开水灌入热水瓶,然后开始整理家务 小文在烧水,在烧水的过程中整理家务,等水烧开以后,放下手中的家务活,将开水灌入热水瓶,然后继续整理家务 这也是日 ...
- 原来现在很多人都用SignalR来实现Chat Room
今天从一个业余开发的群里,看到有人要求这样一个项目需求: 1,)学员可以通过在线课堂找到自己喜欢的老师和课程. 2,)每个人可以建立自己课堂,每个课堂扣分多个子房间,交流群.设置管理员:有录音功能,可 ...
- CentOS6.5 安装HAProxy 1.5.20
[在CentOS下安装haproxy] sudo yum install haproxy 编辑配置文件 vim /etc/haproxy/haproxy.cfg #------------------ ...