我写了一些方法来获取像素,但它不起作用。它给了我运行时错误。
实际上我在单独的类中运行此方法并在我的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;
}
答案 0 :(得分:132)
试试这个:
爪哇
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)
答案 1 :(得分:37)
您可以在dimen.xml中添加dp值并使用
int pixels = getResources().getDimensionPixelSize(R.dimen.idDimension);
这更容易......
答案 2 :(得分:19)
公式为: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);
}
希望这会有所帮助......
答案 3 :(得分:1)
试试这个:没有传递上下文
public static float dipToPixels(float dipValue) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, Resources.getSystem().getDisplayMetrics());
}