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)、160dpiの画面に表示します。詳細については、「 dp単位をピクセル単位に変換する」を参照してください。

あなたは試すことができます:

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

お役に立てれば...

于 2011-12-06T11:56:53.420 に答える
7

context を渡さずにこれを試してください:

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