您的位置:首页 > 其它

通过DisplayMetrics获取屏幕分辨率等参数以及源码解析

2016-08-02 16:43 609 查看
用法--通过WindowManager将设置信息存放到DisplayMetrics中

WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(outMetrics);
mScreenHeight = outMetrics.heightPixels;
Logger.d(TAG, "--toStrng-" + outMetrics.toString());
Logger.d(TAG, "--屏幕高度-" + outMetrics.heightPixels);
Logger.d(TAG, "--屏幕宽度-" + outMetrics.widthPixels);
Logger.d(TAG, "--scaledDensity-" + outMetrics.scaledDensity);
Logger.d(TAG, "--设置密度-" + outMetrics.density);
Logger.d(TAG, "--densityDpi-" + outMetrics.densityDpi);
Logger.d(TAG, "--xdpi-" + outMetrics.xdpi);
Logger.d(TAG, "--ydpi-" + outMetrics.ydpi);


打印结果
其中
outMetrics.widthPixels
outMetrics.heightPixels 为设备宽和高的像素
outMetrics.density为密度为3.0
outMetrics.densityDpi为密度api480


源码分析Display类

public void getMetrics(DisplayMetrics outMetrics) {
synchronized (this) {
updateDisplayInfoLocked();


//在这个方法中获取屏幕信息
mDisplayInfo.getAppMetrics(outMetrics, mDisplayAdjustments);
}
}


查看getAppMetrics方法-->最后在Display类中获取
private void getMetricsWithSize(DisplayMetrics outMetrics, CompatibilityInfo compatInfo,
Configuration configuration, int width, int height) {
outMetrics.densityDpi = outMetrics.noncompatDensityDpi = logicalDensityDpi;
outMetrics.density = outMetrics.noncompatDensity =
logicalDensityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
outMetrics.scaledDensity = outMetrics.noncompatScaledDensity = outMetrics.density;
outMetrics.xdpi = outMetrics.noncompatXdpi = physicalXDpi;
outMetrics.ydpi = outMetrics.noncompatYdpi = physicalYDpi;

width = (configuration != null
&& configuration.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED)
? (int)((configuration.screenWidthDp * outMetrics.density) + 0.5f) : width;
height = (configuration != null
&& configuration.screenHeightDp != Configuration.SCREEN_HEIGHT_DP_UNDEFINED)
? (int)((configuration.screenHeightDp * outMetrics.density) + 0.5f) : height;

outMetrics.noncompatWidthPixels  = outMetrics.widthPixels = width;
outMetrics.noncompatHeightPixels = outMetrics.heightPixels = height;

if (!compatInfo.equals(CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO)) {
compatInfo.applyToDisplayMetrics(outMetrics);
}
}


最后发现所求的参数信息都是在DisplayMetrics类中处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: