0

私は現在ゲームを開発しています。すべてのオブジェクトの測定値として DP を使用しており、メトリクスを介して PX に計算されます。問題は、たとえば、Nexus 7 タブレットではすべての要素が見栄えがよく、完璧なサイズですが、Nexus 4 では単純に大きすぎることです。これは明らかに DP が原因です。

どうすればこのようなことを達成できますか:

オブジェクトは常に画面の幅の 1/5 ですか?

プログラムで新しい幅を計算する必要がありますか? もしそうなら、どうすればいいですか?ディスプレイの密度と解像度を念頭に置いておく必要がありますが、今はこれをどのように計算できるか想像できません. または、これを実現する他の方法はありますか?

ところで:私はキャンバスに描いているので、これをすべてピクセルに再計算する必要があります。

これは私が現在使用しているものです:

public int convertDpToPx(int dp) {
    DisplayMetrics displayMetrics = mActivity.getResources().getDisplayMetrics();
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
}
public int convertPxToDp(int px) {
    DisplayMetrics displayMetrics = mActivity.getResources().getDisplayMetrics();
    return (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_PX, px , displayMetrics);
}

たとえば、オブジェクト #1 の幅は 100 dp ですが、7 インチ タブレットよりも 4.7 インチ デバイスの方が画面の占める割合がはるかに大きくなります。

4

1 に答える 1

1

実際には簡単です。アクティビティのウィンドウをWindowManager取得し、画面サイズ/メトリックを取得します。次に、幅をView画面幅の 1/5 に設定します。

ここに

public class World extends Activity {

int screenWidth, screenHeight;

WindowManager w;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Point size = new Point();
    w = getWindowManager();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        w.getDefaultDisplay().getSize(size);

        screenWidth = size.x;
        screenHeight = size.y;
    } else {
        Display d = w.getDefaultDisplay();
        screenWidth = d.getWidth();
        screenHeight = d.getHeight();
    }

    //here you can set the View's width to screenWidth/5
}

お役に立てれば!

于 2013-08-17T16:55:34.467 に答える