android px dp,Formula px to dp, dp to px android

本文探讨如何通过memoization优化Java中频繁调用的像素转换函数,介绍了两种实现方式:Java 7的synchronized和Java 8的Lambda表达式。通过缓存先前计算结果,显著提升函数执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In most of the cases, conversion functions are called frequently. We can optimize it by adding memoization. So,it does not calculate every-time the function is called.

Let's declare a HashMap which will store the calculated values.

private static Map pxCache = new HashMap<>();

A function which calculates pixel values :

public static float calculateDpToPixel(float dp, Context context) {

Resources resources = context.getResources();

DisplayMetrics metrics = resources.getDisplayMetrics();

float px = dp * (metrics.densityDpi / 160f);

return px;

}

A memoization function which returns the value from HashMap and maintains the record of previous values.

Memoization can be implemented in different ways in Java. For Java 7 :

public static float convertDpToPixel(float dp, final Context context) {

Float f = pxCache.get(dp);

if (f == null) {

synchronized (pxCache) {

f = calculateDpToPixel(dp, context);

pxCache.put(dp, f);

}

}

return f;

}

Java 8 supports Lambda function :

public static float convertDpToPixel(float dp, final Context context) {

pxCache.computeIfAbsent(dp, y ->calculateDpToPixel(dp,context));

}

Thanks.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值