Skip to content

Instantly share code, notes, and snippets.

@vincetreur
Last active January 15, 2017 09:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save vincetreur/675ad4bbbee30d5a0d9b to your computer and use it in GitHub Desktop.
Save vincetreur/675ad4bbbee30d5a0d9b to your computer and use it in GitHub Desktop.
A small utility to help converting between dips and pixels in your Android code. Most solutions are unreadable, this one should read a lot better.
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.util.DisplayMetrics;
import android.util.TypedValue;
/**
* Convert between DP and pixels, like {@link java.util.concurrent.TimeUnit} does.
* For example:
* Dimens.DP.toPX(context.getResources(), 16); // 16dp to pixels
* Dimens.PX.toDP(context.getResources(), 16); // 16px to dips
*/
public enum Dimens {
DP {
public float toPX(@NonNull final Resources resources, int dp) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, resources.getDisplayMetrics());
}
public float toDP(@NonNull final Resources resources, int dp) {
return dp;
}
},
PX {
public float toPX(@NonNull final Resources resources, int px) {
return px;
}
public float toDP(@NonNull final Resources resources, int px) {
DisplayMetrics metrics = resources.getDisplayMetrics();
return px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
}
};
Dimens() {
}
public float toPX(@NonNull final Resources resources, float i) {
throw new AbstractMethodError();
}
public float toDP(@NonNull final Resources resources, float i) {
throw new AbstractMethodError();
}
}
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.util.DisplayMetrics;
import android.util.TypedValue;
/**
* Convert between DP and pixels, like {@link java.util.concurrent.TimeUnit} does.
* But now without enums, because #perfmatters
* For example:
* Dimens2.DP.toPX(context.getResources(), 16); // 16dp to pixels
* Dimens2.PX.toDP(context.getResources(), 16); // 16px to dips
*/
public class Dimens2 {
public static class DP {
DP() {
}
public static float toPX(@NonNull final Resources resources, int dp) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, resources.getDisplayMetrics());
}
public static float toDP(@NonNull final Resources resources, int dp) {
return dp;
}
}
public static class PX {
PX() {
}
public static float toPX(@NonNull final Resources resources, int px) {
return px;
}
public static float toDP(@NonNull final Resources resources, int px) {
DisplayMetrics metrics = resources.getDisplayMetrics();
return px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
}
}
Dimens() {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment