Android之dip与px互转
2016-06-02 10:37
405 查看
直接上码,只为记录:
/**
*
* @author Jenly
*
*/
public class DisplayUtils {
/**
* dip转px
* @param context
* @param dipValue
* @return
*/
public static int dip2px(Context context, float dipValue){
final float scale = getDisplayMetrics(context).density;
return (int)(dipValue * scale + 0.5f);
}
/**
* px转dip
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue){
final float scale = getDisplayMetrics(context).density;
return (int)(pxValue / scale + 0.5f);
}
/**
* getDisplayMetrics
* @param context
* @return
*/
public static DisplayMetrics getDisplayMetrics(Context context){
return context.getResources().getDisplayMetrics();
}
/**
* 获取屏幕宽度和高度,单位为px
* @param context
* @return
*/
public static Point getScreenMetrics(Context context){
DisplayMetrics dm = getDisplayMetrics(context);
int width = dm.widthPixels;
int height = dm.heightPixels;
return new Point(width, height);
}
/**
* 获取屏幕长宽比
* @param context
* @return
*/
public static float getScreenRate(Context context){
Point p = getScreenMetrics(context);
float h = p.y;
float w = p.x;
return (h/w);
}
}
PS: 在dip与px互转时,因为最后转int会丢失精度,所以+0.5f用来减少误差。
/**
*
* @author Jenly
*
*/
public class DisplayUtils {
/**
* dip转px
* @param context
* @param dipValue
* @return
*/
public static int dip2px(Context context, float dipValue){
final float scale = getDisplayMetrics(context).density;
return (int)(dipValue * scale + 0.5f);
}
/**
* px转dip
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue){
final float scale = getDisplayMetrics(context).density;
return (int)(pxValue / scale + 0.5f);
}
/**
* getDisplayMetrics
* @param context
* @return
*/
public static DisplayMetrics getDisplayMetrics(Context context){
return context.getResources().getDisplayMetrics();
}
/**
* 获取屏幕宽度和高度,单位为px
* @param context
* @return
*/
public static Point getScreenMetrics(Context context){
DisplayMetrics dm = getDisplayMetrics(context);
int width = dm.widthPixels;
int height = dm.heightPixels;
return new Point(width, height);
}
/**
* 获取屏幕长宽比
* @param context
* @return
*/
public static float getScreenRate(Context context){
Point p = getScreenMetrics(context);
float h = p.y;
float w = p.x;
return (h/w);
}
}
PS: 在dip与px互转时,因为最后转int会丢失精度,所以+0.5f用来减少误差。
相关文章推荐
- GitHub 优秀的 Android 开源项目
- 简析Android五大布局(LinearLayout、FrameLayout、RelativeLayout等)
- android日志打印库,可以配置打印到本地,可以配置打印格式化的日志
- Android studio使用过程中遇到的问题解决汇总
- Android 4.1.2 input type number时placeholder不显示的问题
- Android手机通过wifi进行数据传输(一)
- 打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(三)具体实现
- Android 上自定义的复式折线图(二)
- Android ble扫描版本高于6.0后需要定位权限
- Android通用的搜索框
- Android 屏幕旋转相关解析
- Android init.rc如何启动service去执行sh脚本
- Android init.rc如何启动service去执行sh脚本
- Android init.rc如何启动service去执行sh脚本
- Android init.rc如何启动service去执行sh脚本
- Android init.rc如何启动service去执行sh脚本
- AndroidStudio的一些实用技巧
- 禁止ScrollView自动滑动到底部
- 在MAC上开发Android项目系列—1—给MAC配置牛逼的Android模拟器
- Android Studio中如何使用Git和Github来管理项目