前言

有一定开发经验的小伙伴肯定会发现这样一个问题,当我们用xml来写布局的时候,通常用的是dp、sp。(相信大家都知道为什么这样用)。当我们用Java代码来创建View控件时,会发现方法接收的参数都是以px为单位的,当然我们不希望直接使用px的(相信大家都知道为什么不希望使用px为单位)。这个时候大家很自然的会想到转换一下就OK啦。dp、sp与px之间有一定的转换公式,但每用一次就写一次这不是程序员的风格。所以这里就总结了一个工具类,希望可以帮助到大家。

GitHub地址

代码

内容比较简单,话不多说,直接上代码

/**

* 常用单位转换的工具类

*/

public class DensityUtils {

private DensityUtils() {

}

/**

* dp转px

*

* @param context

* @return

*/

public static int dp2px(Context context, float dpVal) {

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, context.getResources()

.getDisplayMetrics());

}

/**

* sp转px

*

* @param context

* @return

*/

public static int sp2px(Context context, float spVal) {

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, context.getResources()

.getDisplayMetrics());

}

/**

* px转dp

*

* @param context

* @param pxVal

* @return

*/

public static float px2dp(Context context, float pxVal) {

final float scale = context.getResources().getDisplayMetrics().density;

return (pxVal / scale);

}

/**

* px转sp

*

* @param pxVal

* @return

*/

public static float px2sp(Context context, float pxVal) {

return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);

}

/**

* 得到屏幕宽度

*

* @param context

* @return

*/

public static int getDisplayWidth(Context context) {

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

}

/**

* 得到屏幕高度

*

* @param context

* @return

*/

public static int getDisplayHeight(Context context) {

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

}

}

实际上,核心内容还是Android API里面的内容,这里只不过是对Android API进行了一次封装,让自己更容易记忆,在开发中效率更高。

我们点进去TypedValue.applyDimension();这个方法,源码如下,源码很清晰,相信大家一眼就能看明白。

public static float applyDimension(int unit, float value,

DisplayMetrics metrics)

{

switch (unit) {

case COMPLEX_UNIT_PX:

return value;

case COMPLEX_UNIT_DIP:

return value * metrics.density;

case COMPLEX_UNIT_SP:

return value * metrics.scaledDensity;

case COMPLEX_UNIT_PT:

return value * metrics.xdpi * (1.0f/72);

case COMPLEX_UNIT_IN:

return value * metrics.xdpi;

case COMPLEX_UNIT_MM:

return value * metrics.xdpi * (1.0f/25.4f);

}

return 0;

}

补充

补充三个方法:

获取状态栏的高度

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

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

这一类代码,并不需要死记硬背,收集好,用的时候可以快速找到即可。

/**

* 获得状态栏的高度

*

* @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 = getDisplayWidth(activity);

int height = getDisplayHeight(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 = getDisplayWidth(activity);

int height = getDisplayHeight(activity);

Bitmap bp = null;

bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight);

view.destroyDrawingCache();

return bp;

}

android 单位转换工具,Android单位转换----常用单位转换工具类相关推荐

  1. php html5 开发工具有哪些_php常用的开发工具有哪些

    php常用的开发工具有哪些 现在热门的PHP,是从什么开发工具里产生的呢?下面是小编整理的php常用的开发工具介绍,希望对大家有用,更多消息请关注应届毕业生网. 1.EditPlus EditPlus ...

  2. python分析工具有哪些_常用Python数据分析工具汇总

    Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用性和跨平台性.Python可用于数据分析,但其单纯依赖Python本身自带的库进行数 ...

  3. java 嵌入式 类型工具库_你常用的Java工具库都有哪些?

    Java命令行选项解析之Commons-CLI & Args4J & JCommander详细内容 Java调用Native API之JNA详细内容 Java执行SSH/SCP之JSc ...

  4. 常用的ftp工具有哪些,常用的ftp工具推荐

    说起好用的ftp工具,我就要说说这款iis7服务器管理工具了,它在有着批量管理ftp站点的前体下,还能实现定时文件上传和下载功能,整体来说非常实用. 虽然iis7服务器管理工具属于ftp的客户端,但是 ...

  5. java常用压测工具_几款常用压测工具推荐

    ab ab是apache自带的压力测试工具,使用起来非常方便. 安装 如果安装了apache, 那么ab已经安装好了,如果不想安装apache的话,可以通过以下方式安装ab # ubuntu sudo ...

  6. java 压测工具_几款常用压测工具推荐

    ab ab是apache自带的压力测试工具,使用起来非常方便. 安装 如果安装了apache, 那么ab已经安装好了,如果不想安装apache的话,可以通过以下方式安装ab # ubuntu sudo ...

  7. 产品经理常用工具 互联网产品经理常用软件及工作平台

    互联网产品经理必备的工具 http://www.yixieshi.com/it/11509.html 产品经理工具列表 http://www.masterchat.cn/topic/pm-tools/ ...

  8. 整理了100个市面上常用的测试工具,希望能帮助到大家...

    哈喽,我是二黑,这里赠送一份软件测试资料. 1.软件测试学习路线 2.软件测试视频资料 3.软件测试相关文档 4.软件测试相关工具.安装包 5.高级测试工程师简历模板 6.面试题.模拟面试.PDF文档 ...

  9. 什么是计算机网络教学反思,《计算机网络实训之常用的网络工具》教学反思

    <计算机网络实训之常用的网络工具>教学反思 常用的网络工具是网络管理员必须要掌握好的内容,本实验在学习完相关理论知识的基础上,让学生动手实践,亲自试验常用网络工具的使用.因为直观明了,马上 ...

最新文章

  1. 迭代器、生成器、装饰器
  2. Hadoop记录-metastore jmx配置
  3. php调用以太坊geth API说明
  4. matlab从入门到精通:图像可视化基础操作
  5. Boring data structure problem 模拟-双端队列
  6. VS Code设置代码片段(C++)
  7. C#中Font类详解
  8. .Net Core - 使用Supervisor进行托管部署
  9. 南京大学计算机学院英才计划,2020年“英才计划”工作实施方案
  10. 23岁女工为600元全勤奖带伤加班3天 一周后身亡
  11. ubuntu 降级linux内核,ubuntu16内核降级
  12. 悉尼大学计算机相关专业硕士,悉尼大学计算机硕士课程详细介绍
  13. Facebook上市或造千亿美元航母
  14. 苹果wifi网速慢怎么办_三步解决家里网速慢的问题
  15. 公告栏文本横向循环滚动
  16. iphone11屏比例_iPhone每一代的屏幕尺寸比例是多少
  17. Neo4j 启动报错 Server shutdown initiated by request
  18. 名帖119 文徵明 小楷《摩诃般若波罗蜜多心经》
  19. LeetCode.黑白方格画
  20. 【EmailCamel外贸邮件群发】邮件到达收件箱系列文章05:免费公共邮箱作为发件人的限制

热门文章

  1. MyBatis 源码解读-带着问题去看源码
  2. 完成AOP 顶层设计-AopProxy
  3. EasyExcel实现读操作
  4. 区域数据导入功能(POI使用方式)
  5. 数据库-mysql基础操作之输入查询
  6. Redisson框架框架集成
  7. java1121123211234321_使用for 语句打印显示下列数字形式:n=4 1 1 2 1 1 2 ,使用for 语句打印显示下列数字形式:n=4...
  8. python爬取12306_python爬取12306的车次信息
  9. 第二十一章:变换(三)
  10. matplotlib.pyplot---------Python强大的绘图功能软件