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 ...
随机推荐
- saltstack之(十一)扩展组件salt-returners
场景:每次执行salt任务后,将返回结果存入到数据库,可以做任务跟踪以及历史查看. 1.在node1上安装mysql数据库并启动设置root密码.[root@node1 ~]# yum -y inst ...
- C++学了这么多年,你也许不知道为什么类定义要放在.h文件,类实现放在cpp文件。它们如何关联?
原文 http://blog.csdn.net/ithzhang/article/details/8119286 主题 C++ C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类 ...
- 史上最全的CSS样式整理
一 字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: o ...
- php 远程下载木马
function dlfile($file_url, $save_to) { $content = file_get_contents($file_url); file_put_contents($s ...
- 网站提供的下载IE8很慢 由于Microsoft 联机服务暂时不可用,SmartScreen筛选器无法检查此网站。
在内网环境中,网站系统提供了一个下载功能,用ie8下载特别慢,一个20kb的文件,下载要10分钟,但是在其他环境中是很快的,试了半天,原来是:由于Microsoft 联机服务暂时不可用,SmartSc ...
- Android ListView 自定义 Adapter
自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = Mai ...
- LED_9261在linux2.6.30中tick_led的实现
在linux2.6.30内核中,内核也提供了相关的平台驱动来操作gpio或LED,但更简便的方法是直接操作GPIO来控制led. 网上一博文中介绍直接封装led_on和led_off()函数直接调用即 ...
- JavaScript解决命名冲突的一种方法
过程化编码 过程化编码, 表现为 定义若干函数,然后调用定义函数, 随着页面交互逻辑变化, 从简单到复杂, 定义的所有函数.和变量 都挂在 window对象上, window对象 编程者子自定义变量名 ...
- 浅谈C# 匿名变量
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- css less
LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便CSS的编写和维护. LESSCSS可以在多种语 ...