在Android中将dip转换为px

use*_*524 50 android

我写了一些方法来获取像素,但它不起作用.它给我运行时错误.

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

Board board = new Board(this);
board.execute(URL);
Run Code Online (Sandbox Code Playgroud)

此代码以异步方式运行.请帮我.

 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;

    }
Run Code Online (Sandbox Code Playgroud)

Dmy*_*lyk 134

试试这个:

Java的

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

科特林

fun Context.dipToPixels(dipValue: Float) =
    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, resources.displayMetrics)
Run Code Online (Sandbox Code Playgroud)

  • 你会为像素返回浮点数?它不应该被转换为int吗? (6认同)

jua*_*lla 38

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

int pixels = getResources().getDimensionPixelSize(R.dimen.idDimension);
Run Code Online (Sandbox Code Playgroud)

它更容易......


小智 21

公式为:px = dp*(dpi/160),用于160 dpi的屏幕.有关详细信息,请参阅http://developer.android.com/guide/practices/screens_support.html.

你可以尝试:

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

希望这可以帮助...


Sum*_*ule 6

试试这个:对于没有传递上下文

 public static float dipToPixels(float dipValue) {
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, Resources.getSystem().getDisplayMetrics());
    }
Run Code Online (Sandbox Code Playgroud)