В виде:
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = metrics.density * dp;
int pixels = (int) (fpixels + 0.5f);
В Деятельности, конечно, вы опускаете getContext()
.
Чтобы преобразовать масштабированные пиксели (sp
) в пиксели, просто используйте metrics.scaledDensity
вместо metrics.density
.
РЕДАКТИРОВАТЬ: Как @ ответ Сантоша указывает, вы можете сделать то же самое, используя служебный класс TypedValue
:
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dp = 20f;
float fpixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
int pixels = Math.round(fpixels);
Для sp
, заменить TypedValue.COMPLEX_UNIT_SP
на TypedValue.COMPLEX_UNIT_DIP
.
Внутренне applyDimension()
выполняет те же вычисления, что и мой код выше. Какая версия используется, зависит от вашего стиля кодирования.