53

我已经编写了从 dip 中获取像素的方法,但它不起作用。它给了我运行时错误。

实际上我在单独的类中运行这个方法并在我的 Activity 类中初始化

Board board = new Board(this);
board.execute(URL);

此代码异步运行。请帮我。

public float getpixels(int dp){
    //Resources r = boardContext.getResources();
    //float px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpis, r.getDisplayMetrics());
        
    final float scale = this.boardContext.getResources().getDisplayMetrics().density;
    int px = (int) (dp * scale + 0.5f);

    return px;
}
4

4 回答 4

140

试试这个:

爪哇

public static float dipToPixels(Context context, float dipValue) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}

科特林

fun Context.dipToPixels(dipValue: Float) =
    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, resources.displayMetrics)
于 2011-12-06T11:50:27.333 回答
42

您可以在 dimen.xml 中添加 dp 值并使用

int pixels = getResources().getDimensionPixelSize(R.dimen.idDimension);

这更容易...

于 2014-10-20T13:46:57.780 回答
24

公式为:px = dp * (dpi / 160),用于 160 dpi 屏幕。有关详细信息,请参阅将 dp 单位转换为像素单位

你可以试试:

public static int convertDipToPixels(float dips) {
    return (int) (dips * appContext.getResources().getDisplayMetrics().density + 0.5f);
}

希望这可以帮助...

于 2011-12-06T11:56:53.420 回答
7

在不传递上下文的情况下尝试此操作:

 public static float dipToPixels(float dipValue) {
     return TypedValue.applyDimension(
         TypedValue.COMPLEX_UNIT_DIP,
         dipValue,
         Resources.getSystem().getDisplayMetrics()
     );
 }
于 2018-03-05T13:54:45.983 回答