2011-12-06 71 views
46

我已經寫好了從dip中獲取像素的方法,但它不起作用。它給我運行時錯誤。在dip中轉換dip到px

其實我運行在單獨的類此方法,並在我的活動類

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

你會得到什麼錯誤? boardContext爲空? getResources爲空? – Sulthan

回答

123

嘗試這種情況:

爪哇

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) 
+5

你會返回像素浮點數嗎?它不應該被轉換爲int嗎? – hjchin

+0

工程,但似乎應用w,h到我的浮動活動,android向右和左(總共32dp)添加16dp,因爲我必須通過的dipValue是dipValue我在佈局xml + 32dp - 固定它 – Mercury

34

可以在dimen.xml添加DP值,並使用

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

它更容易...

0

試試這個:For without passing context

public static float dipToPixels(float dipValue) { 
     return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, Resources.getSystem().getDisplayMetrics()); 
    }