Çoğu durumda, dönüştürme işlevleri sık sık çağrılır. Not ekleyerek optimize edebiliriz. Bu nedenle, işlev her çağrıldığında hesaplanmaz.
Hesaplanan değerleri depolayacak bir HashMap beyan edelim.
private static Map<Float, Float> pxCache = new HashMap<>();
Piksel değerlerini hesaplayan bir işlev:
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'ten değeri döndüren ve önceki değerlerin kaydını tutan bir not işlevi.
Notlama, Java'da farklı şekillerde uygulanabilir. Java 7 için :
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 işlevini destekler :
public static float convertDpToPixel(float dp, final Context context) {
pxCache.computeIfAbsent(dp, y ->calculateDpToPixel(dp,context));
}
Teşekkürler.