0

期待される結果

寸法が iPhone 4 Retina デバイス用に設計された UI ウィジェットがいくつかあります。単位はピクセルです。たとえば、幅 30 ピクセル、高さ 30 ピクセルのボタンです。デザイン スタイルを Android デバイスにコピーしたい、たとえば、前の 30 x 30 ボタンは、iPhone 4 Retina の画面幅の 30/640 = 4.6875%、画面の高さの 30/960 = 9.375% を占めます。 Android デバイスの画面幅の 4.6875%、画面の高さの 9.375% を占めます。

問題

次のコードで使用されている iPhone 4 Retina デバイスのサイズ倍率がわかりません。

コード

/**
 * Change dip value to pixel value using density of current device
 */
public static int dip2px(Context context, float dpValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    Log.d("ch", "density of current device : " + scale);
    return (int) (dpValue * scale + 0.5f);
}

/**
 * Change pixel value to dip value using density of current device
 */
public static int px2dip(Context context, float pxValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
Log.d("congliu", "density of current device : " + scale);
    return (int) (pxValue / scale + 0.5f);
}

参照

iPhone 4 網膜

ppi: 326

解像度 : 640 x 960 ピクセル

サイズ倍率 : 不明

サムスンギャラクシー S

ppi: 233

解像度 : 480 x 800 ピクセル

サイズ倍率 : 1.5

サムスンギャラクシーノート

ppi: 285

解像度 : 800 x 1280 ピクセル

サイズ倍率 : 2.0

4

2 に答える 2

1

考慮すべきいくつかの視点があります。しかし、私は簡単な方法に従っているだけです:

px -> dp

私の画像リソースは xhdpi フォルダーにあり、Retina iPhone の画像を使用しています。

ios に 10 などのピクセル値があるとします。

Android デバイスのピクセル値を取得する場合:

DisplayMetrics dm = new DisplayMetrics();
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(dm);

SCREEN_DENSITY = dm.density;
SCREEN_WIDTH_DP = (int) (SCREEN_WIDTH_PIXELS / dm.density);

public static int getScaledWidthPixelsByDP(int desingDP) {
    double v = desingDP / 320f * SCREEN_WIDTH_PIXELS;
    return (int) v;
}
于 2013-07-19T03:33:44.950 に答える