Density 篇
2016-05-24 13:44
465 查看
sp 与 dp 的转换
import java.util.ArrayList; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Paint; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Paint.FontMetrics; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.Toast; /** * 手机屏幕, 密度 处理工具类 * * ppi的运算方式是: PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px, dp和px的换算公式 : dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。 sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。 sp 与 px 的换算公式:sp*ppi/160 = px 总结得出: px = dp*ppi/160 dp = px / (ppi / 160) px = sp*ppi/160 sp = px / (ppi / 160) dp = sp? * */ @SuppressLint("NewApi") public class DensityUtil { public static Point displaySize; /** * 将px值转换为dip或dp值,保证尺寸大小不变 * 1dp*像素密度/160 = 实际像素数 * @param pxValue * @param scale * (DisplayMetrics类中属性density) * @return */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * 将dip或dp值转换为px值,保证尺寸大小不变 * 1dp*像素密度/160 = 实际像素数 * @param dipValue * @param scale * (DisplayMetrics类中属性density) * @return */ public static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } /** * 将px值转换为sp值,保证文字大小不变 * * @param pxValue * @param fontScale * (DisplayMetrics类中属性scaledDensity) * @return */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 将sp值转换为px值,保证文字大小不变 * * @param spValue * @param fontScale * (DisplayMetrics类中属性scaledDensity) * @return */ public static int sp2px(Context context, float spVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, context.getResources().getDisplayMetrics()); } /** * 计算字体高度 * * @param fontSize * @return */ public static int getFontHeight(float fontSize) { Paint paint = new Paint(); paint.setTextSize(fontSize); FontMetrics fm = paint.getFontMetrics(); return (int) Math.ceil(fm.descent - fm.top) + 2; } /** * 设置View的高度 * * @param v * @param height */ public static void setViewHeight2(View v, int height) { LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) v .getLayoutParams(); // 取控件mGrid当前的布局参数 linearParams.height = height;// 当控件的高强制设成height v.setLayoutParams(linearParams); // 使设置好的布局参数应用到控件myGrid } /** * 获得屏幕宽度 * * @param context * @return */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } /** * 获得屏幕高度 * * @param context * @return */ public static int getScreenHeight(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels; } /** * 获得状态栏的高度 * * @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 = getScreenWidth(activity); int height = getScreenHeight(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 = getScreenWidth(activity); int height = getScreenHeight(activity); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return bp; } }
相关文章推荐
- Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
- Android自定义相机练习与思考
- Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
- Oracle GoldenGate:配置各种问题
- 指针的顶层和底层const对指针的引用的影响
- 解决onActivityResult方法不执行的办法
- Log4j在Java se项目中的使用
- Ceph IO简介
- table的三种遍历方式
- 计算机程序的构造和解释 练习 1.39
- Android OpenGL_ES2.0 理解矩阵Matrix
- Qt入门学习——Qt 5 帮助文档的使用
- Qt入门学习——Qt 5 帮助文档的使用
- Android OpenGL_ES2.0 LookAt 我的眼睛在哪里?
- qt介绍
- Bitmap 篇
- 如何利用BI实现人力资源可视化管理
- PAT乙级—1042. 字符统计(20)-native
- 如何利用BI实现人力资源可视化管理
- qt介绍