ในกรณีส่วนใหญ่ฟังก์ชั่นการแปลงจะถูกเรียกบ่อยครั้ง เราสามารถปรับให้เหมาะสมด้วยการเพิ่มการบันทึก ดังนั้นจึงไม่คำนวณทุกครั้งที่มีการเรียกใช้ฟังก์ชัน
มาประกาศ HashMap ที่จะเก็บค่าที่คำนวณได้
private static Map<Float, Float> pxCache = new HashMap<>();
ฟังก์ชั่นที่คำนวณค่าพิกเซล:
public static float calculateDpToPixel(float dp, Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}
ฟังก์ชั่นบันทึกความจำที่ส่งคืนค่าจาก HashMap และเก็บรักษาบันทึกของค่าก่อนหน้า
การบันทึกสามารถนำไปใช้ได้หลายวิธีใน Java สำหรับ 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 รองรับฟังก์ชั่น Lambda :
public static float convertDpToPixel(float dp, final Context context) {
pxCache.computeIfAbsent(dp, y ->calculateDpToPixel(dp,context));
}
ขอบคุณ