Android 显示档位

/frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java

简化计算公式:x = (最短边px / 2)/ 默认dpi
小: 默认显示
默认: 默认显示
大: x > 1.09
较大:x > 1.18
最大:x> 1.27

默认dpi获取方式:
adb shell wm density
adb shell getprop ro.sf.lcd_density

		// 获取默认dpi
        final int defaultDensity = DisplayDensityUtils.getDefaultDisplayDensity(
                Display.DEFAULT_DISPLAY);
        // 选取最短边像素
        final int minDimensionPx = Math.min(metrics.widthPixels, metrics.heightPixels);
        
        // 160 * 最小边像素 / 320 
        final int maxDensity = DisplayMetrics.DENSITY_MEDIUM * minDimensionPx / MIN_DIMENSION_DP;
        // 最大dpi / 默认dpi 最大值为1.5
        final float maxScale = Math.min(MAX_SCALE, maxDensity / (float) defaultDensity);
        // 最小倍数 默认值 0.85
        final float minScale = MIN_SCALE;
        // 计算档位数量,当(maxScale-1) / 0.09大于3时取3,其它时候取(maxScale-1) / 0.09,通常最大档位在平板中出现。
        final int numLarger = (int) MathUtils.constrain((maxScale - 1) / MIN_SCALE_INTERVAL,
                0, SUMMARIES_LARGER.length);
        // 小是默认,可忽略
        final int numSmaller = (int) MathUtils.constrain((1 - minScale) / MIN_SCALE_INTERVAL,
                0, SUMMARIES_SMALLER.length);

MathUtils.constrain

    public static float constrain(float amount, float low, float high) {
        return amount < low ? low : (amount > high ? high : amount);
    }

计算每档dpi的值
小:默认乘以0.85

        if (numLarger > 0) {
            final float interval = (maxScale - 1) / numLarger;
            for (int i = 0; i < numLarger; i++) {
                // Round down to a multiple of 2 by truncating the low bit.
                // (最大dpi-默认dpi) * 当前档位 / 总档位数 + 默认dpi
                final int density = ((int) (defaultDensity * (1 + (i + 1) * interval))) & ~1;
                if (currentDensity == density) {
                    currentDensityIndex = curIndex;
                }
                values[curIndex] = density;
                entries[curIndex] = res.getString(SUMMARIES_LARGER[i]);
                curIndex++;
            }
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值